null=True
blank=True
default = 0
这些有什么不同?在什么情况下使用它们?
来自 Django模型字段参考:
Field.null
如果为
True
,Django将在数据库中将空值存储为NULL
。默认为False
。请注意,空字符串值始终将存储为空字符串,而不是
NULL
。仅对于非字符串字段(例如整数、布尔值和日期),才使用null=True
。对于这两种类型的字段,如果希望允许表单中的空值,则还需要设置blank=True
,因为null
参数仅影响数据库存储(请参见blank
)。除非您有充分的理由,否则避免在基于字符串的字段(如
CharField
和TextField
)上使用null
。如果一个基于字符串的字段具有null=True
,那么它就有了“无数据”的两个可能值:NULL和空字符串。在大多数情况下,拥有“无数据”的两个可能值是多余的;Django约定使用空字符串,而不是NULL
。
Field.blank
如果为
True
,则允许该字段为空。默认为False
。请注意,这与
null
是不同的。null
纯粹与数据库相关,而blank
与验证相关。如果一个字段具有blank=True
,则Django管理站点上的验证将允许输入空值。如果一个字段具有blank=False
,则该字段将是必需的。
Field.default
字段的默认值。这可以是一个值或可调用对象。如果是可调用对象,则每次创建新对象时都会调用它。
来自文档:
null
如果设置为True,Django将在数据库中将空值存储为NULL。默认值为False。
blank
如果设置为True,该字段允许为空白。默认值为False。
default
该字段的默认值。
您可以使用 "default
" 来设置字段的默认值,如果您的代码没有显式地将其设置为某个值,则将使用该默认值。
使用 "blank
" 进行表单验证 - 使用 blank=True 将允许将字段设置为空值。
如果您想将空值存储为 "null",请使用 "null
"。然而,通常更喜欢将空值设置为空字符串或0,具体取决于给定字段的情况。
Null: 与数据库有关。用于定义一个给定的数据库列是否接受空值。
Blank: 与验证有关。在调用form.is_valid()进行表单验证时使用。
Default: 如果未为该字段提供任何值,则始终将默认值存储到该字段中。
null和blank的默认值为False。
也就是说,拥有null=True和blank=False的字段是可以的。这意味着在数据库级别上,该字段可以为NULL,但在应用程序级别上,它是必填字段。
现在,大多数开发人员犯的错误是:为CharField和TextField等基于字符串的字段定义null=True。避免这样做。否则,您将最终拥有两个可能的“无数据”值,即:None和空字符串。拥有两个可能的“无数据”值是冗余的。Django约定使用空字符串,而不是NULL。
在实现方面:
'空白'字段对应所有表单。指定是否需要该值在表单中,并进行相应的表单验证。 'True'允许空值。
'null'字段对应于数据库级别。它将在数据库中设置为NULL或NOT NULL。
因此,如果在具有blank=true的管理员中留下一个字段为空,则会将NULL输入到数据库中。现在,如果数据库中的特定列被指定为NOT NULL,则可能会引发错误。
null
是关于数据库存储的。Django揭示了SQL数据库中一个有用但相对危险的方面。这确实是一些必须在文档中解释而不是通过代码限制或强制执行的内容——没有任何限制可以被强制执行而不破坏有用(尽管可能是边缘情况)的功能。 - Chris Morgan