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

时间:2015-07-14 06:47:26

标签: django django-rest-framework

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

BooleanField()
IntegerField()

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

g = serializers.BooleanField()
d = serializers.IntegerField()

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

处理空字段,空字段和空字段的不同选项(必然)有点微妙,所以它有时会让人们感到惊讶并不令人惊讶。

  

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

这是不正确的:

  • IntegerField(allow_null=True)有效。
  • 如果要为布尔字段允许空输入,则需要使用NullBooleanField()类。

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

  

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

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

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

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

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

请注意,使用可输入API时,在HTML输入did not get the default values set中清空字段时出现错误。这已在the upcoming 3.1.4 release中解决。

Edwin的答案中建议的initial参数也很有用,但是用于设置最初在HTML表单字段中呈现的值。

答案 1 :(得分:1)

Django Rest Framework Serializer有initial个选项来设置字段的dafault值。

g = serializers.BooleanField(initial=True)
d = serializers.IntegerField(initial=0)

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