在我的基于Django Rest Framework serializers.ModelSerializer的序列化程序中 我正在声明字段,仅在导入某些数据时进行考虑(反序列化)并且不反映任何模型字段。
new_number = serializers.CharField(
write_only=True, required=False,
allow_null=True, default=''
)
来自Django Rest Framework documentation:
write_only
将此项设置为True可确保在更新时使用该字段或 创建实例,但在序列化时不包括 表示。
默认为False
required
如果在此期间未提供字段,通常会引发错误 反序列化。如果不需要此字段,则设置为false 在反序列化期间出现。
将此设置为False还允许使用对象属性或字典 序列化实例时从输出中省略的键。如果 键不存在它将不会包含在输出中 表示。
默认为True。
我遇到的问题是当这个字段为空时,我得到错误:
{'new_number': ['This field can not be blank']}
我正在跑步:
djangorestframework==3.2.3
Django==1.8.4
答案 0 :(得分:1)
您需要在allow_blank=True
序列化程序字段中传递new_number
参数。其默认值为False
。
new_number = serializers.CharField(
write_only=True, required=False, allow_blank=True, # allow empty string as a valid value
default=''
)
来自allow_blank
参数文档:
allow_blank - 如果设置为
True
,则应为空字符串 被视为有效值。如果设置为False
,则空字符串为 被视为无效并将引发验证错误。默认为False
。
此外,您应该在此使用allow_blank
而不是allow_null
,而不是两者都使用,因为这意味着可能会有2种类型的空值。
allow_null
选项也适用于字符串字段 不鼓励使用allow_blank
。设置是有效的allow_blank=True
和allow_null=True
,但这样做意味着 允许有两种不同类型的空值 字符串表示,可能导致数据不一致和 微妙的应用程序错误。