【问题标题】:django rest framework combination of write_only=True and required=False not workingwrite_only=True 和 required=False 的 django rest 框架组合不起作用
【发布时间】:2015-12-05 15:59:15
【问题描述】:

在我的基于 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 以确保在更新或更新时可以使用该字段 创建一个实例,但在序列化时不包括在内 表示。

默认为假

required

如果在执行期间未提供字段,通常会引发错误 反序列化。如果不需要此字段,则设置为 false 在反序列化过程中出现。

将此设置为 False 还允许对象属性或字典 序列化实例时要从输出中省略的键。如果 密钥不存在,它根本不会包含在输出中 表示。

默认为真。

我遇到的问题是,当这个字段为空时,我得到错误: {'new_number': ['This field can not be blank']}

我正在跑步:

djangorestframework==3.2.3
Django==1.8.4

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-12
      • 1970-01-01
      • 1970-01-01
      • 2016-02-16
      • 1970-01-01
      • 2016-02-15
      • 1970-01-01
      相关资源
      最近更新 更多