当我们在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 - default为False 如果为True, Django将在数据库中存储为null。

blank - default为False 如果为真,则允许该字段为空

更多的钱,转到 https://docs.djangoproject.com/en/3.0/topics/db/models/

其他回答

null - default为False 如果为True, Django将在数据库中存储为null。

blank - default为False 如果为真,则允许该字段为空

更多的钱,转到 https://docs.djangoproject.com/en/3.0/topics/db/models/

简单的回答是:Null是数据库表,Blank是Django表单。

根据文档,null真正与数据库相关。如果null=true, DB将null输入存储为null。否则,空字符串将被存储为空字符串。 然而,如果blank=true, form将验证它为ok,否则该字段将被form视为“必需”。

默认为false。

null = True

意味着没有数据库对要填充的字段的约束,因此您可以有一个具有此选项的填充的空值对象。

blank = True

意味着在django表单中没有验证约束。所以当你为这个模型填写一个modelForm时,你可以不填这个选项。

默认值为“null”和“blank”为“False”。

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

Blank:这是验证相关的。它将在表单验证期间调用form.is_valid()时使用。

也就是说,有一个null=True和blank=False的字段是完全没问题的。意思是在数据库级别上,该字段可以为NULL,但在应用程序级别上,它是必需的字段。

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