ForeignKey 不允许为空值。
ForeignKey 不允许为空值。
我正在使用Django REST框架2.0。
这是我的模型类:
class Mission(models.Model): assigned_to = models.ForeignKey('auth.User', related_name='missions_assigned', blank = True)
这是我的视图类:
class MissionList(generics.ListCreateAPIView): model = Mission serialize_class = MissionSerializer
- 在浏览器中呈现multipart表单,
assigned_to
字段为空。 - 当发布原始JSON时,会收到以下错误消息:
无法分配None:“Mission.assigned_to”不允许空值。
admin 更改状态以发布 2023年5月23日
blank
选项用于表单验证,而null
选项用于写入数据库。
因此,您可以在该字段中添加null=True
。
编辑:继续评论
考虑保存对象的两个步骤:
- 验证器(由
blank
控制) - 数据库限制(由
null
控制)
对于default
选项,以IntegerField
为例,
default=5,blank=True,null=False
,即使您没有分配值(具有blank=True
),也会传递(1),因为它具有默认值(5),并将5
而不是None
写入DB。
blank=True,null=False
,它通过(1)但不通过(2),因为它试图将None
写入DB。
因此,如果要使字段可选,请使用default=SOMETHING,blank=True,null=False
或blank=True,null=True
。
另一个例外是类似于字符串的字段,例如CharField
。
建议仅使用blank=True
,留下null=False
。
这使得字段成为字符串(> = 1个字符)或空字符串(' ',长度为0),而不是None
。
原因是当设置null=True
时,"未设置"状态将具有两个可能的值:空字符串和None
,这很困惑(可能会导致错误)。