python - 安全地允许 DRF 串行器字段中的 M2M 字段为空所需的最低选项是什么?

标签 python django django-rest-framework

DRF 序列化器字段中有四个选项:requiredallow_emptyallow_nullallow_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>关系。

来源:django-rest-framework docs

说到 <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/

相关文章:

python - 如何使用Django访问网页数据?

python - 如何在Python中返回url路径的子字符串?

python - Django:make_password 输出的密码与 django.auth 不同

python - 如何在没有 QWidget 的情况下使用 TabWidget 启动项目

python - Ubuntu 12.04 LTS : Update python 2. 7.3 到 2.7.6 不破坏依赖关系

python - 根据第一个子模型的属性对查询集进行排序,会返回重复的对象。 Django ,DRF

python - Django URL 正则表达式接受任何数字或直到 99 的任何数字

python - 使用 MIMEApplication 将 s3 文件附加到 smtplib lib 电子邮件

python - 如何正确显示模板中递增的 Django 模型字段值?

django - 在 Django 现有用户模型中添加 uuid 字段?