我知道根据文档,以下字段不会allow_blank=True
和allow_null=True
BooleanField()
IntegerField()
我需要允许客户端不指定g或d(如下所示)并将值作为None
存储在数据库中。
g = serializers.BooleanField()
d = serializers.IntegerField()
有什么想法吗?
答案 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=None
和null=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)