【发布时间】:2011-05-22 00:15:08
【问题描述】:
null=Trueblank=Truedefault = 0
有什么区别?你什么时候用什么?
【问题讨论】:
标签: python database django string integer
null=Trueblank=Truedefault = 0有什么区别?你什么时候用什么?
【问题讨论】:
标签: python database django string integer
直接来自Django model field reference:
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 是关于数据库存储的。 Django 暴露了 SQL 数据库一个有用但相对危险的方面。这确实是必须在文档中解释的东西,而不是在代码中限制或强制执行——没有任何限制可以在不破坏有用(尽管可能是极端情况)功能的情况下强制执行。
来自docs:
null如果为真,Django 将存储为空 数据库中的值为 NULL。 默认为 False。
blank如果为True,则允许该字段 为空白。默认为 False。
default的默认值 字段。
如果您的代码未明确将其设置为某个值,您可以使用“default”来设置将用于相关字段的值。
使用“blank”进行表单验证 - blank=True 将允许将字段设置为空值
如果您想在数据库中存储一个空值作为“null”,请使用“null”。但是,通常最好将空白值设置为空字符串或针对给定字段设置为 0。
【讨论】:
在实现方面:
“空白”字段对应于所有表单。指定表单中是否需要此值并完成相应的表单验证。 'True' 允许空值。
“null”字段对应于数据库级别。它将在 DB 中设置为 NULL 或 NOT NULL。
因此,如果在管理员中将字段留空且空白=true,则将 NULL 输入数据库。现在,如果将 DB 中的特定列指定为 NOT NULL,这可能会引发错误。
【讨论】:
Null:与数据库相关。定义给定的数据库列是否接受空值。
空白:与验证相关。它将在表单验证期间调用 form.is_valid() 时使用。
默认:如果没有为该字段提供任何值,则始终将给定值(默认值)存储到该字段。
null和blank的默认值为False。
话虽如此,拥有一个 null=True 和 blank=False 的字段是完全可以的。表示在数据库级别该字段可以为 NULL,但在应用程序级别它是必填字段。
现在,大多数开发人员都搞错了:为 CharField 和 TextField 等基于字符串的字段定义 null=True。避免这样做。否则,您最终会得到两个可能的“无数据”值,即:None 和一个空字符串。 “无数据”有两个可能的值是多余的。 Django 的约定是使用空字符串,而不是 NULL。
【讨论】: