django 的模型字段选项 ``blank`` 和 ``null`` 未设置时的默认值是多少?

Dom*_*itz 5 django django-models

在文档中,我无法找到答案。

如果我想让一个字段留空,我是否必须明确设置blank=True?

编辑:我瞎了。或者愚蠢。谢谢你向我指出这一点;)

Wit*_*ail 7

我知道你已经链接了文档,但我明确地向遇到相同问题的任何人提出这一点。不过,您的标题问题的答案在文档中明确而清楚地说明了 - 两者都是False默认设置。如果您希望该字段为blank=True,那么是的,您需要在每个字段上手动指定。

空白用于表格:

如果为 True,则该字段可以为空。默认值为假。

请注意,这与 null 不同。null 纯粹与数据库相关,而空白与验证相关。如果一个字段有空白=真,表单验证将允许输入一个空值。如果某个字段有空白 = False,则该字段将是必需的。

如果您在该字段中保存没有任何内容的记录,则 Null 是存储在数据库中的内容。同样,这个字段的属性是null=False

如果为 True,Django 将在数据库中将空值存储为 NULL。默认值为假。

避免在基于字符串的字段(例如 CharField 和 TextField)上使用 null,因为空字符串值将始终存储为空字符串,而不是 NULL。如果基于字符串的字段具有 null=True,则意味着它有两个可能的“无数据”值:NULL 和空字符串。在大多数情况下,“无数据”有两个可能的值是多余的;Django 约定是使用空字符串,而不是 NULL。

对于基于字符串和非基于字符串的字段,如果您希望在表单中允许空值,您还需要设置 blank=True,因为 null 参数仅影响数据库存储(见空白)。

在很多情况下,您希望表单为空白,但数据库条目为not Null- 例如,如果您在模型 save 上指定您自己的自定义 slug。

当然,这也意味着Field您从主Field类派生的任何 custom将具有相同的默认行为。如果这真的困扰您,您可以使用您想要的行为覆盖Field类,但是对于跟随您的其他人进行调试真的很麻烦。