在我基于Django Rest框架序列化器的序列化器中。ModelSerializer我正在声明字段,它将只在导入一些数据(反序列化)期间考虑,并且不反映任何模型字段。
new_number = serializers.CharField(
write_only=True, required=False,
allow_null=True, default=''
)
来自Django Rest框架文档:
write_only
将此设置为True以确保该字段可以在更新或类序列化时不包含表示。
默认为False
required
如果在过程中没有提供字段,通常会引发错误反序列化。如果不需要此字段,则设置为false在反序列化过程中出现。
将其设置为False也允许对象属性或字典在序列化实例时要从输出中省略的键。如果Key不存在,它将不包含在输出中表示。
默认为True。
我遇到的问题是,当这个字段为空时,我得到错误:{'new_number': ['This field can not be blank']}
I am running:
djangorestframework==3.2.3
Django==1.8.4
需要在new_number
序列化器字段中传递allow_blank=True
参数。默认为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
,因为这意味着将有两种类型的空值。
allow_null
选项也可用于字符串字段,尽管不建议使用,建议使用allow_blank
。设置是有效的allow_blank=True
和allow_null=True
,但这样做意味着允许的空值有两种不同类型字符串表示,这可能导致数据不一致和微妙的应用程序错误。