首页 > 解决方案 > 在 DRF 序列化器字段中安全地允许 M2M 字段为空所需的最低选项是什么?

问题描述

有四个选项: DRF 序列化器字段中的required、和。为了允许空的 M2M(多对多)字段,是否安全或是否还需要协调其他选项?此外,反之亦然需要什么?allow_emptyallow_nullallow_blankallow_emptyTrue

djangorestframework==3.8.2

标签: pythondjangodjango-rest-framework

解决方案


Django-rest-framework 文档说:

allow_blank- 如果设置为,True则空字符串应被视为有效值。如果设置为,False则空字符串被视为无效并会引发验证错误。默认为False.

allow_null完全一样。但不鼓励使用它以支持allow_blank. allow_blank=True同时设置和是有效的allow_null=True,但这样做意味着字符串表示将允许两种不同类型的空值,这可能导致数据不一致和细微的应用程序错误。

allow_blank对于文本选择allow_null应该是首选,对于数字或其他非文本选择应该是首选。

allow_empty属性已从django-rest-framework 3.2.x添加

allow_empty与关系一起使用ListSerializer或与many=True关系一起使用。

来源:django-rest-framework 文档

说到除ManyToManyCHARfield 或选择字段以外的字段,使用allow_blank=True隐式表示该字段不是必需的。但是按照优先顺序,如果allow_blank=True后跟 a required=True,则该字段是必需的。

allow_empty与 ListSerializers 显式使用以允许序列化程序接受空列表。默认情况下,这是True. 这也暗示说:不需要。因此,仅allow_empty=TrueM2M关系字段中添加是安全的。


推荐阅读