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

时间:2015-09-09 15:29:58

标签: django django-rest-framework

在我的基于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

1 个答案:

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