为什么在django模型中,blank和null是不同的选项?



在django模型中定义字段时,有两种方式表示允许字段为空。null表示该字段在数据库中可以为空,blank表示该字段在表单中可以为空。为什么它们是不同的?每次我设置一个而不设置另一个,就会出问题。允许它们是不同的,似乎只会引起允许你创建数据库不接受的对象的形式的问题。

换句话说,你什么时候会在django模型中使用null=True,blank=Falsenull=False,blank=True ?

它们有两个完全不同的含义:

blank:决定是否应该在表单中按要求验证字段。False表示如果不提供,表单将产生错误,而True表示允许空值。

null:决定该字段在DB级别是否应该设置为NULLNOT NULL。这与表单验证无关。

一些例子:如果字段不是CharField或TextField,

blank=True, null=False将在字段为空时引发IntegrityError。这两个字段将''(空字符串)而不是NULL发送给DB。

blank=False, null=True总是要求在所有表单中填写该字段(表单将在该字段上引发ValidationError),即使允许该列为NULL。然而,这只适用于表单。您可以手动将该属性设置为None,并将其保存在表单外部(例如在shell中)。

null=False, blank=True通常用于CharField s,其中空白答案作为空字符串而不是空字符串存储在db中。反过来用就没有多大意义了。

对于非字符串字段,非答案存储为null,因此您需要这两个字段。

最新更新