DRF序列化器字段中有四个选项:required
,allow_empty
,allow_null
和allow_blank
。要允许空的M2M(多对多)字段,将allow_empty
设置为True
是安全,还是还需要协调其他选项?另外,反之亦然需要什么?
djangorestframework == 3.8.2
答案 0 :(得分:1)
Django-rest-framework文档说:
allow_blank
-如果设置为True
,则空字符串应被视为有效值。如果设置为False
,则空字符串被视为无效,并且将引发验证错误。默认为False
。
allow_null
的作用完全相同。但是不建议使用allow_blank
。同时设置allow_blank=True
和allow_null=True
是有效的,但是这样做意味着对于字符串表示形式,允许有两种不同类型的空值,这可能导致数据不一致和细微的应用程序错误。 >
allow_blank
对于文本选择应该是首选,而allow_null
对于数字或其他非文本选择应该是首选。
allow_empty
属性
allow_empty
与ListSerializer
或many=True
关系一起使用。
来源: django-rest-framework docs
说到ManyToMany
以外的其他字段(例如CHarfield或选择字段),则隐含使用allow_blank=True
表示该字段不是必需的。但是如果allow_blank=True
后跟required=True
,则具有优先顺序,则该字段是必需的。
allow_empty
与ListSerializers显式一起使用,以允许空列表被序列化程序接受。默认情况下,这是True
。其中还暗含说:不需要。因此,在allow_empty=True
关系字段中仅添加M2M
是安全的。