DRF 序列化程序字段中有四个选项:required
、allow_empty
、allow_null
和allow_blank
。要允许空的 M2M(多对多(字段,仅allow_empty
作为True
是否安全,或者是否需要协调其他选项?另外,反之亦然需要什么?
Djangorest框架==3.8.2
Django-rest-framework docs 说:
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 docs
说到ManyToMany
以外的字段,如查菲尔德或选择字段,使用allow_blank=True
隐含表示该字段不是必需的。但是按照优先顺序,如果allow_blank=True
后跟一个required=True
,则该字段是必需的。
而allow_empty
与 ListSerializers 显式使用,以允许序列化程序接受空列表。默认情况下,这是True
。这也含蓄地说:不需要。因此,在M2M
关系字段中仅添加allow_empty=True
是安全的。