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

TIM*_*MEX 49 python database string django integer

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

有什么不同?你什么时候用的?

Chr*_*gan 49

直接从Django模型字段参考:

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

字段的默认值.这可以是值或可调用对象.如果可调用,则每次创建新对象时都会调用它.

你不明白这一切吗?

  • 我认为这对每个人来说可能并不清楚:要使IntegerField在两个表单和db上都可以为空,则必须同时具有null = True和blank = True.请参阅:https://code.djangoproject.com/wiki/NewbieMistakes#IntegerNULLS (28认同)

Ben*_*pan 15

来自docs:

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

blank如果为True,则允许该字段为空.默认值为False.

default 字段的默认值.

如果default代码未将其明确设置为值,则可以使用" "来设置将用于相关字段的值.

使用" blank"进行表单验证 - blank = True将允许将字段设置为空值

null如果要在DB中将空值存储为"null",请使用" ".但是,通常最好将空值设置为空字符串,或者将其设置为适合给定字段的0.


sar*_*n3h 8

我知道你已经有答案然而直到今天它来判断是否把很难null=Trueblank=Trueboth到现场。我个人认为为开发人员提供如此多的选择是非常无用和令人困惑的。让他们随意处理空值或空白。

我按照这个表(来自“Django的两勺”一书): 何时使用 null 和空白

何时使用 null 和空白

  • 我认识到这一点。它来自《姜戈的两勺》一书。一个很棒的资源,虽然已经过时了(从 1.5 开始有新版本吗?)。您确实应该承认并赞扬他们使用他们的材料。 (3认同)