在数据库中的列上设置null=True
组NULL
(而不是NOT NULL
).Django字段类型(如DateTimeField
或ForeignKey
)的空白值将作为NULL
存储在数据库中.
blank
确定表单中是否需要该字段.这包括管理员和自定义表单.如果为blank=True
,则不需要该字段,而如果为False
,则该字段不能为空.
这两者的组合非常频繁,因为通常情况下,如果要允许表单中的某个字段为空,则还需要数据库为该字段允许NULL
个值.例外情况是CharField
s和TextField
s,在Django中,never保存为NULL
.空白值作为空字符串(''
)存储在数据库中.
举几个例子:
models.DateTimeField(blank=True) # raises IntegrityError if blank
models.DateTimeField(null=True) # NULL allowed, but must be filled out in a form
显然,使用这两个选项在逻辑上是没有意义的(尽管如果希望表单中始终需要字段,可能会有null=True, blank=False
的用例,在通过shell之类的东西处理对象时是可选的)
models.CharField(blank=True) # No problem, blank is stored as ''
models.CharField(null=True) # NULL allowed, but will never be set as NULL
Django从不将CHAR
和TEXT
类型保存为NULL
,因此不需要null=True
.但是,您可以手动将其中一个字段设置为None
,以强制将其设置为NULL
.如果你有一个可能需要这样做的场景,你仍然应该包括null=True
.