在 DRF 序列化程序字段中安全允许 M2M 字段为空所需的最低选项是什么?



DRF 序列化程序字段中有四个选项:requiredallow_emptyallow_nullallow_blank。要允许空的 M2M(多对多(字段,仅allow_empty作为True是否安全,或者是否需要协调其他选项?另外,反之亦然需要什么?

Djangorest框架==3.8.2

Django-rest-framework docs 说:

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

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

allow_blank应优先用于文本选择,allow_null应优先用于数字或其他非文本选择。

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

allow_empty用于ListSerializermany=True关系。

来源:Django-rest-framework docs

说到ManyToMany以外的字段,如查菲尔德或选择字段,使用allow_blank=True隐含表示该字段不是必需的。但是按照优先顺序,如果allow_blank=True后跟一个required=True,则该字段是必需的。

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

最新更新