安全地允许DRF序列化器字段中的M2M字段为空的最低要求是什么?

时间:2018-10-03 07:11:36

标签: python django django-rest-framework

DRF序列化器字段中有四个选项:requiredallow_emptyallow_nullallow_blank。要允许空的M2M(多对多)字段,将allow_empty设置为True安全,还是还需要协调其他选项?另外,反之亦然需要什么?

djangorestframework == 3.8.2

1 个答案:

答案 0 :(得分:1)

Django-rest-framework文档说:

  

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

allow_null的作用完全相同。但是不建议使用allow_blank。同时设置allow_blank=Trueallow_null=True是有效的,但是这样做意味着对于字符串表示形式,允许有两种不同类型的空值,这可能导致数据不一致和细微的应用程序错误。 >

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

已从 django-rest-framework 3.2.x

添加了

allow_empty属性

allow_emptyListSerializermany=True关系一起使用。

来源: django-rest-framework docs

说到ManyToMany以外的其他字段(例如CHarfield或选择字段),则隐含使用allow_blank=True表示该字段不是必需的。但是如果allow_blank=True后跟required=True,则具有优先顺序,则该字段是必需的。

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