DRF 序列化器字段中有四个选项:required
、allow_empty
、allow_null
和 allow_blank
。要允许空 M2M(多对多)字段,将 allow_empty
设置为 True
是否安全,还是需要其他选项也协调一下?另外,反之亦然需要什么?
djangorestframework==3.8.2
最佳答案
Django-rest-framework 文档说:
<b>allow_blank</b>
- If set to<b>True</b>
then the empty string should be considered a valid value. If set to<b>False</b>
then the empty string is considered invalid and will raise a validation error. Defaults to<b>False</b>
.
<b>allow_null</b>
做的完全一样。但不鼓励使用它,而是使用 <b>allow_blank</b>
。设置 <b>allow_blank=True</b>
均有效和<b>allow_null=True</b>
,但这样做意味着字符串表示形式允许有两种不同类型的空值,这可能会导致数据不一致和微妙的应用程序错误。
<b>allow_blank</b>
应首选文本选择,并且 <b>allow_null</b>
应首选数字或其他非文本选择。
<b>allow_empty</b>
属性已从 django-rest-framework 3.2.x 添加
<b>allow_empty</b>
与 <b>ListSerializer</b>
一起使用或与 <b>many=True</b>
关系。
说到 <b>ManyToMany</b>
以外的字段像 CHarfield 或选择字段,使用 <b>allow_blank=True</b>
隐含地表明该字段不是必需的。但按照优先顺序 if <b>allow_blank=True</b>
后面跟着 <b>required=True</b>
,则该字段为必填项。
而<b>allow_empty</b>
显式与 ListSerializers 一起使用,以允许序列化程序接受空列表。默认情况下,这是 <b>True</b>
。这也含蓄地说:不需要。因此,仅添加 <b>allow_empty=True</b>
是安全的。在 <b>M2M</b>
关系字段。
关于python - 安全地允许 DRF 串行器字段中的 M2M 字段为空所需的最低选项是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52621599/