django rest框架write_only=True和required=False的组合不起作用



在我基于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=Trueallow_null=True,但这样做意味着允许的空值有两种不同类型字符串表示,这可能导致数据不一致和微妙的应用程序错误。

相关内容

最新更新