在Django REST中存储BooleanField()和IntegerField()的默认值
我知道根据文档,以下字段不接受在Django REST中存储BooleanField()和IntegerField()的默认值,django,django-rest-framework,Django,Django Rest Framework,我知道根据文档,以下字段不接受allow\u blank=True和allow\u null=True BooleanField() IntegerField() 我需要允许客户端不指定g或d(如下所示),并将值存储在数据库中为None g = serializers.BooleanField() d = serializers.IntegerField() 有什么想法吗?Django Rest Framework序列化程序有initial选项来设置字段的dafault值 g = seria
allow\u blank=True
和allow\u null=True
BooleanField()
IntegerField()
我需要允许客户端不指定g或d(如下所示),并将值存储在数据库中为None
g = serializers.BooleanField()
d = serializers.IntegerField()
有什么想法吗?Django Rest Framework序列化程序有
initial
选项来设置字段的dafault值
g = serializers.BooleanField(initial=True)
d = serializers.IntegerField(initial=0)
处理空字段、空白字段和空字段的不同选项(必然)有点微妙,因此有时会绊倒人们也就不足为奇了 我知道根据文档,以下字段不接受allow\u blank=True和allow\u null=True 这是不正确的:
有效IntegerField(allow\u null=True)
- 如果要允许布尔字段输入为空,则需要使用
类NullBooleanField()
allow_blank
,因为空字符串在这两种情况下都不是有效值
我需要允许客户端不指定g或d(如下所示),并将值存储在DB中为None 您可以使用
IntegerField(默认值=None)
和NullBooleanField(默认值=None)
在这种情况下,如果省略这些值,它们将作为None
包含在serializer.validated\u data
中。您需要确保在模型字段上使用null=True
/NullBooleanField
或整型字段(必需=False)
和空布尔字段(必需=False)
在这种情况下,如果省略这些值,它们将不会包含在序列化程序中。已验证的\u数据中,并且将使用模型字段默认值。您需要确保在模型字段上使用default=None
和null=True
/NullBooleanField
请注意,使用可浏览的API清空HTML输入中的字段时存在错误。这一点已在中得到解决
Edwin的答案中建议的
initial
参数也很有用,但用于设置要在HTML表单字段中最初呈现的值。是否将此存储为True
和0
而不是所问的None
?我确实尝试了您的建议,但即使我将d设置为0,然后我仍然得到一个错误。有没有更多的信息,你想在任何一个答案?