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

发布于 2024-10-06 17:27:13 字数 134 浏览 3 评论 0原文

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

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

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

What's the difference? When do you use what?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

盛夏已如深秋| 2024-10-13 17:27:13

直接来自 Django 模型字段参考

Field.null

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

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

避免在基于字符串的字段(例如 CharFieldTextField)上使用 null,除非您有充分的理由。如果基于字符串的字段具有 null=True,则意味着它有两个可能的“无数据”值:NULL 和空字符串。在大多数情况下,“无数据”有两个可能的值是多余的。 Django 约定是使用空字符串,而不是 NULL

Field.blank

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

请注意,这与 null 不同。 null 纯粹与数据库相关,而 blank 与验证相关。如果字段具有 blank=True,则 Django 管理站点上的验证将允许输入空值。如果字段有 blank=False,则该字段为必填字段。

Field.default

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

Direct from Django model field reference:

Field.null

If True, Django will store empty values as NULL in the database. Default is False.

Note that empty string values will always get stored as empty strings, not as NULL. Only use null=True for non-string fields such as integers, booleans and dates. For both types of fields, you will also need to set blank=True if you wish to permit empty values in forms, as the null parameter only affects database storage (see blank).

Avoid using null on string-based fields such as CharField and TextField unless you have an excellent reason. If a string-based field has null=True, that means it has two possible values for “no data”: NULL, and the empty string. In most cases, it’s redundant to have two possible values for “no data;” Django convention is to use the empty string, not NULL.

Field.blank

If True, the field is allowed to be blank. Default is False.

Note that this is different than null. null is purely database-related, whereas blank is validation-related. If a field has blank=True, validation on Django’s admin site will allow entry of an empty value. If a field has blank=False, the field will be required.

Field.default

The default value for the field. This can be a value or a callable object. If callable it will be called every time a new object is created.

蘑菇王子 2024-10-13 17:27:13

来自文档

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

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

default 默认值
字段。

如果您的代码未明确将其设置为某个值,您可以使用“default”来设置将用于相关字段的值。

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

如果您想存储空值,请使用“null”在数据库中为“null”。然而,通常首选将空白值设置为空字符串或适合给定字段的 0。

From docs:

null If True, Django will store empty
values as NULL in the database.
Default is False.

blank If True, the field is allowed to
be blank. Default is False.

default The default value for the
field.

You can use "default" to set the value that will be used for the field in question should your code not explicitly set it to a value.

Use "blank" for form validation purposes - blank=True will allow the field to be set to an empty value

Use "null" if you would like to store an empty value as "null" in the DB. Often it's preferred, however, to set blank values to an empty string or to 0 as appropriate for a given field.

萧瑟寒风 2024-10-13 17:27:13

我知道您已经有了答案,但是直到今天,还很难判断是否将 null=Trueblank=Trueboth 放入场地。我个人认为向开发人员提供如此多的选择是非常无用且令人困惑的。让他们随意处理空值或空白。

我遵循这张表(来自《Django 的两勺》一书):
何时使用空和空白

何时使用 null 和空白

I know you already have your answer however till this day it's difficult to judge whether to put null=True or blank=True or both to a field. I personally think it's pretty useless and confusing to provide so many options to developers. Let the handle the nulls or blanks however they want.

I follow this table (from the book "Two Scoops of Django"):
When to use null and blank

When to use null and blank

夢归不見 2024-10-13 17:27:13

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

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

默认:如果没有为此字段提供任何值,则始终将给定值(默认值)存储到该字段。

null 和空白的默认值为 False

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

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

Null: It is database-related. Defines if a given database column will accept null values or not.

Blank: It is validation-related. It will be used during forms validation, when calling form.is_valid().

Default: All Time it store the given value(default value) to the field if one doesn't provide any value for this field.

The default values of null and blank are False.

That being said, it is perfectly fine to have a field with null=True and blank=False. Meaning on the database level the field can be NULL, but in the application level it is a required field.

Now, where most developers get it wrong: Defining null=True for string-based fields such as CharField and TextField. Avoid doing that. Otherwise, you will end up having two possible values for “no data”, that is: None and an empty string. Having two possible values for “no data” is redundant. The Django convention is to use the empty string, not NULL.

似最初 2024-10-13 17:27:13

在实现方面:

“空白”字段对应于所有表单。指定表单中是否需要此值并完成相应的表单验证。
“True”允许空值。

“null”字段对应于数据库级别。它将在数据库中设置为 NULL 或 NOT NULL。

因此,如果在 admin 中将一个字段保留为空并且空白=true,则 NULL 将被输入到数据库中。现在,如果数据库中的特定列被指定为 NOT NULL,则可能会引发错误。

In implementation terms:

The 'blank' field corresponds to all forms. Specifies if this value is required in form and corresponding form validation is done.
'True' allows empty values.

The 'null' field corresponds to DB level. It will be set as NULL or NOT NULL at the DB.

Hence if leave a field empty in admin with blank=true, NULL is fed into the DB. Now this might throw an error if that particular column in the DB is specified as NOT NULL.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文