在Django models.py中,default,null和blank之间有什么区别?

时间:2010-12-08 04:12:45

标签: python database django string integer

  • null=True
  • blank=True
  • default = 0

有什么区别?你什么时候用的?

5 个答案:

答案 0 :(得分:46)

直接来自Django model field reference

  

<强> Field.null

     

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

     

请注意,空字符串值将始终存储为空字符串,而不是NULL。仅对非字符串字段使用null=True,例如整数,布尔值和日期。对于这两种类型的字段,如果您希望在表单中允许空值,则还需要设置blank=True,因为null参数仅影响数据库存储(请参阅blank)。

     

除非您有充分的理由,否则请避免在基于字符串的字段nullCharField上使用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放入字段。我个人认为为开发人员提供这么多的选择是没有用的,而且令人困惑。让句柄根据需要为空或空格。

我遵循此表: When to use null and blank

When to use null and blank

答案 4 :(得分:0)

:与数据库相关。定义给定的数据库列是否接受空值。

空白:与验证相关。调用form.is_valid()时,它将在表单验证期间使用。

默认:如果没有为该字段提供任何值,它将一直将给定值(默认值)存储到该字段中。

null和blank的默认值为 False

话虽这么说,具有null = True和blank = False的字段是完全可以的。在数据库级别上,该字段可以为NULL,但是在应用程序级别上,它是必填字段。

现在,大多数开发人员都会弄错了:为基于字符串的字段(如CharField和TextField)定义null = True。避免这样做。否则,您最终将有两个可能的“无数据”值,即:和一个空字符串。为“无数据”设置两个可能的值是多余的。 Django约定是使用空字符串,而不是NULL。