python - 在 DRF 序列化器字段中安全地允许 M2M 字段为空所需的最低选项是什么?
问题描述
有四个选项: DRF 序列化器字段中的required
、和。为了允许空的 M2M(多对多)字段,是否安全或是否还需要协调其他选项?此外,反之亦然需要什么?allow_empty
allow_null
allow_blank
allow_empty
True
djangorestframework==3.8.2
解决方案
Django-rest-framework 文档说:
allow_blank
- 如果设置为,True
则空字符串应被视为有效值。如果设置为,False
则空字符串被视为无效并会引发验证错误。默认为False
.
allow_null
完全一样。但不鼓励使用它以支持allow_blank
. allow_blank=True
同时设置和是有效的allow_null=True
,但这样做意味着字符串表示将允许两种不同类型的空值,这可能导致数据不一致和细微的应用程序错误。
allow_blank
对于文本选择allow_null
应该是首选,对于数字或其他非文本选择应该是首选。
allow_empty
属性已从django-rest-framework 3.2.x添加
allow_empty
与关系一起使用ListSerializer
或与many=True
关系一起使用。
说到除ManyToMany
CHARfield 或选择字段以外的字段,使用allow_blank=True
隐式表示该字段不是必需的。但是按照优先顺序,如果allow_blank=True
后跟 a required=True
,则该字段是必需的。
而allow_empty
与 ListSerializers 显式使用以允许序列化程序接受空列表。默认情况下,这是True
. 这也暗示说:不需要。因此,仅allow_empty=True
在M2M
关系字段中添加是安全的。
推荐阅读
- server - AEDES 服务器未连接到客户端
- javascript - 需要帮助在 Id 内的类内查找文本
- matlab - Matlab 2.5D Delaunay三角剖分顶点法线
- javascript - 使用 JavaScript 在数组中均匀分布 2 个不同的值
- cordova - 离子cordova平台添加android不工作并抛出package.json错误
- azerothcore - 编译时出错:`identifier not found`(代码 C3861)
- angular - 属性不存在于类型类和组件角度
- python - python pandas - 检查列中的部分字符串是否存在于其他列中
- reactjs - 单击元素时如何更改元素的背景颜色?
- react-native - 张量转JPEG:提高质量