为什么django模型有空白和空的不同选项?

时间:2011-11-16 21:57:06

标签: django django-models

在django模型中定义字段时,有两种方法可以说该字段是空的。 null表示数据库中可以为空,blank表示该字段在表单中可以为空。为什么这些不同?每次我设置一个而不是另一个出错。允许它们不同似乎只是邀请表单的问题,允许您创建数据库不接受的对象。

换句话说,您何时会在django模型中使用null=True,blank=Falsenull=False,blank=True

2 个答案:

答案 0 :(得分:38)

他们有两个完全不同的含义:

空白:确定是否应在表单中按要求验证字段。 False表示如果不提供,表单将生成错误,而True表示允许空值。

null :确定该字段是否应在数据库级别设置为NULLNOT NULL。这与表单验证无关。

一些例子:

如果字段留空,

blank=True, null=False会提出IntegrityError,如果它不是CharField或TextField。这两个字段在空时将''(空字符串)而不是NULL发送到数据库。

blank=False, null=True始终要求以所有形式填写字段(表单将在字段上引发ValidationError),即使该列允许为NULL。但是,这仅适用于表格。您可以手动将属性设置为None并将其保存在表单之外(例如,在shell中)。

答案 1 :(得分:1)

null=False, blank=TrueCharField中很常见,其中空白答案作为空字符串而不是空字符存储在数据库中。另一种方式使用起来没有多大意义。

对于非字符串字段,非答案存储为null,因此您需要两者。