在Django REST中存储BooleanField()和IntegerField()的默认值

Ric*_*ckD 5 django django-rest-framework

我知道根据文档,以下字段不采取allow_blank=Trueallow_null=True

BooleanField()
IntegerField()
Run Code Online (Sandbox Code Playgroud)

我需要允许客户端不指定g或d(如下所示)并将值存储在DB中None.

g = serializers.BooleanField()
d = serializers.IntegerField()
Run Code Online (Sandbox Code Playgroud)

有任何想法吗 ?

Tom*_*tie 5

处理空字段、空白字段和​​空字段的不同选项(必然)有点微妙,所以它有时会绊倒人们也就不足为奇了。

我知道根据文档,以下字段不采用 allow_blank=True 和 allow_null=True

这是不正确的:

  • IntegerField(allow_null=True) 已验证。
  • 如果要允许布尔字段的空输入,则需要使用NullBooleanField()该类。

您是正确的,他们都没有allow_blank,因为在任何一种情况下,空字符串都不会是有效值。


我需要允许客户端不指定 g 或 d(如下所示)并将该值存储在数据库中为 None。

您可以使用 IntegerField(default=None)NullBooleanField(default=None)

在这种情况下,当省略这些值时,它们将被包含Noneserializer.validated_data. 您需要确保在模型字段上使用null=True/ NullBooleanField

IntegerField(required=False)NullBooleanField(required=False)

在这种情况下,当省略这些值时,它们将不会包含在 中serializer.validated_data,并且将使用模型字段默认值。您需要确保在模型字段上使用default=Nonenull=True/ NullBooleanField


请注意,使用 Browsable API 时存在一个错误,即 HTML 输入中的空字段未设置默认值。这在即将发布的 3.1.4 版本中得到解决。

initialEdwin 的回答中建议的参数也很有用,但用于设置初始呈现在 HTML 表单字段中的值。


Edw*_*ndo 1

Django Rest Framework Serializer 具有initial设置字段默认值的选项。

g = serializers.BooleanField(initial=True)
d = serializers.IntegerField(initial=0)
Run Code Online (Sandbox Code Playgroud)

http://www.django-rest-framework.org/api-guide/fields/