当我们在Django中添加模型字段时,我们通常这样写:

models.CharField(max_length=100, null=True, blank=True)

ForeignKey, DecimalField等也是如此。两者的基本区别是什么:

null = True只 空白= True只 null=True, blank=True

对于不同的(CharField, ForeignKey, ManyToManyField, DateTimeField)字段?使用选项1、2或3的优点/缺点是什么?


当前回答

当你说null=False时,这意味着数据必须传递到数据库保存。当你说空白=False时,这意味着数据必须从前端输入,反之亦然

其他回答

简单地说,

Blank和null不同。

Null是纯粹与数据库相关的,而blank是与验证相关的(表单要求)。

如果null=True, Django将在数据库中存储空值为null。如果字段有blank=True,表单验证将允许输入空值。如果一个字段有blank=False,该字段将是必需的。

简单的null=True定义了数据库应该接受null值,另一方面,空白=True定义了表单验证该字段应该接受空白值或不接受空白值(如果空白=True,则接受该字段中没有值的表单,空白=False[默认值],则表单验证将显示此字段是必需的错误。

null=与数据库相关的True/False

blank=与表单验证相关的真/假

正如Django Model Field reference中所说:Link

Field options The following arguments are available to all field types. All are optional. null Field.null If True, Django will store empty values as NULL in the database. Default is False. Avoid using null on string-based fields such as CharField and TextField because empty string values will always be stored as empty strings, not as NULL. 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"; the Django convention is to use the empty string, not NULL. For both string-based and non-string-based 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). Note When using the Oracle database backend, the value NULL will be stored to denote the empty string regardless of this attribute blank 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, form validation will allow entry of an empty value. If a field has blank=False, the field will be required.

Null纯粹与数据库相关,而blank与验证相关。如果一个字段为blank=True, Django管理站点的验证将允许输入一个空值。如果一个字段有blank=False,该字段将是必需的

当你设置null=true时,如果字段没有填充,它将在你的数据库中设置为空。如果 你设置blank=true,它不会为该字段设置任何值。