【发布时间】:2019-08-31 10:14:05
【问题描述】:
如何重现:
- 使用
django.db.models.BooleanField()创建一个Django 模型Foo,我们称之为bar。 - 使用
Meta.fields = "__all__"创建一个非常基本的序列化程序类。 -
更新:在现有序列化程序的顶部创建一个
PolymorphicSerializer,并使用PolymorphicSerializer创建一个视图+路径。 - 尝试在不提供
bar的情况下发布新的Foo。
会发生什么:请求返回 HTTP 201 Created 并包含 bar=False。
应该发生什么:请求显然应该失败,并返回表明bar 是必需的。
我在模型上也有一个必需的 IntegerField,并且尝试在没有 that 参数的情况下发布实例数据确实会导致“必需”错误消息。
我没有使用 Django 表单,所以 this 和 this 不是重复的。我试过this workaround,但del kwargs['required'] 失败,出现“KeyError:'required'”。 This other workaround 似乎没有做任何事情,可能是因为该字段也是在模型上定义的。 this workaround 同上。
使用 djangorestframework==3.9.2 和 django==2.1.7。
【问题讨论】:
-
可能是 DRF 中的序列化代码的错误,它可能错误地将缺少值解释为“不正确”,因此错误地解释为“错误”。您可以尝试在序列化程序中将其覆盖为 NullableBoolenField (已经有一段时间了,所以我可能有错误的字段名称)应该理解 null 状态,然后为该字段编写一个验证器,抛出一个 validationError
if val is None
标签: django django-rest-framework