在django模型中定义字段时,有两种方法可以说该字段是空的。 null
表示数据库中可以为空,blank
表示该字段在表单中可以为空。为什么这些不同?每次我设置一个而不是另一个出错。允许它们不同似乎只是邀请表单的问题,允许您创建数据库不接受的对象。
换句话说,您何时会在django模型中使用null=True,blank=False
或null=False,blank=True
?
答案 0 :(得分:38)
他们有两个完全不同的含义:
空白:确定是否应在表单中按要求验证字段。 False
表示如果不提供,表单将生成错误,而True
表示允许空值。
null :确定该字段是否应在数据库级别设置为NULL
或NOT NULL
。这与表单验证无关。
一些例子:
如果字段留空, blank=True, null=False
会提出IntegrityError
,如果它不是CharField或TextField。这两个字段在空时将''
(空字符串)而不是NULL
发送到数据库。
blank=False, null=True
始终要求以所有形式填写字段(表单将在字段上引发ValidationError
),即使该列允许为NULL
。但是,这仅适用于表格。您可以手动将属性设置为None
并将其保存在表单之外(例如,在shell中)。
答案 1 :(得分:1)
null=False, blank=True
在CharField
中很常见,其中空白答案作为空字符串而不是空字符存储在数据库中。另一种方式使用起来没有多大意义。
对于非字符串字段,非答案存储为null
,因此您需要两者。