null=True
blank=True
default = 0
有什么区别?你什么时候用的?
答案 0 :(得分:46)
直接来自Django model field reference:
<强>
Field.null
强>如果
True
,Django会将空值存储为NULL
在数据库中。默认值为False
。请注意,空字符串值将始终存储为空字符串,而不是
NULL
。仅对非字符串字段使用null=True
,例如整数,布尔值和日期。对于这两种类型的字段,如果您希望在表单中允许空值,则还需要设置blank=True
,因为null
参数仅影响数据库存储(请参阅blank
)。除非您有充分的理由,否则请避免在基于字符串的字段
null
和CharField
上使用TextField
。如果基于字符串的字段具有null=True
,则表示它具有“无数据”的两个可能值:NULL和空字符串。在大多数情况下,为“无数据”提供两个可能的值是多余的; Django约定是使用空字符串,而不是NULL
。
<强>
Field.blank
强>如果
True
,则允许该字段为空。默认值为False
。请注意,这与
null
不同。null
纯粹与数据库相关,而blank
与验证相关。如果字段有blank=True
,则Django管理站点上的验证将允许输入空值。如果字段为blank=False
,则该字段为必填字段。
<强>
Field.default
强>字段的默认值。这可以是值或可调用对象。如果可调用,则每次创建新对象时都会调用它。
你不明白这一切吗?
答案 1 :(得分:15)
来自docs:
null
如果为True,Django将存储为空 值在数据库中为NULL。 默认值为False。
blank
如果为True,则允许该字段 是空白的。默认值为False。
default
的默认值 字段。
如果您的代码未明确将其设置为某个值,则可以使用“default
”来设置将用于相关字段的值。
使用“blank
”进行表单验证 - blank = True将允许将字段设置为空值
如果要在数据库中将空值存储为“null”,请使用“null
”。但是,通常最好将空值设置为空字符串,或者将其设置为适合给定字段的0。
答案 2 :(得分:1)
在实施条款中:
'blank'字段对应所有表格。指定表单中是否需要此值,并完成相应的表单验证。 'True'允许空值。
'null'字段对应于DB级别。它将在DB处设置为NULL或NOT NULL。
因此,如果在admin中使用blank = true将字段留空,则将NULL输入DB。现在,如果DB中的特定列被指定为NOT NULL,则可能会抛出错误。
答案 3 :(得分:1)
我知道您已经有了答案,但是直到今天,仍然很难判断是将null=True
还是blank=True
还是both
放入字段。我个人认为为开发人员提供这么多的选择是没有用的,而且令人困惑。让句柄根据需要为空或空格。
答案 4 :(得分:0)
空:与数据库相关。定义给定的数据库列是否接受空值。
空白:与验证相关。调用form.is_valid()时,它将在表单验证期间使用。
默认:如果没有为该字段提供任何值,它将一直将给定值(默认值)存储到该字段中。
null和blank的默认值为 False 。
话虽这么说,具有null = True和blank = False的字段是完全可以的。在数据库级别上,该字段可以为NULL,但是在应用程序级别上,它是必填字段。
现在,大多数开发人员都会弄错了:为基于字符串的字段(如CharField和TextField)定义null = True。避免这样做。否则,您最终将有两个可能的“无数据”值,即:无和一个空字符串。为“无数据”设置两个可能的值是多余的。 Django约定是使用空字符串,而不是NULL。