我使用的是Django REST Framework 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
多部分表单在浏览器中以空的assigned_to
字段选项呈现。
在发布原始JSON时,我收到以下错误消息:
Cannot assign None: "Mission.assigned_to" does not allow null values.
如果设置了此行为,则ForeignKey允许空值。 您的代码将如下所示:
你必须写{}。
注意:更改模型后,需要运行
python manage.py makemigrations yourappname
,然后运行python manage.py migrate
在表单验证中使用
blank
选项,在写入数据库时使用null
。所以您可以将
null=True
添加到该字段。编辑:继续评论
保存对象时考虑以下两个步骤:
blank
控制)null
控制)对于
default
选项,以IntegerField
为例,default=5, blank=True, null=False
,传递(1)即使您没有分配值(具有blank=True
),传递(2)因为它具有默认值(5),并将5
而不是None
写入DB。blank=True, null=False
,传递(1)而不是(2),因为它试图将None
写入数据库。因此,如果要使字段成为可选字段,请使用
default=SOMETHING, blank=True, null=False
或blank=True, null=True
。另一个例外是类似字符串的字段,例如
CharField
。建议单独使用
blank=True
,而不使用null=False
。这使得字段要么是字符串(>;=1个字符)要么是空字符串('',len()==0),并且永远不会
None
。原因是,当设置了
null=True
时,状态“unset”可能有两个值:空字符串和None
,这很容易混淆(并且可能导致错误)。相关问题 更多 >
编程相关推荐