当我们在 Django 中添加模型字段时,我们通常会这样写:
models.CharField(max_length=100, null=True, blank=True)
ForeignKey
, DecimalField
等也是如此。它们之间的基本区别是什么:
null=True
仅blank=True
只有null=True
和blank=True
关于不同的( CharField
, ForeignKey
, ManyToManyField
, DateTimeField
)使用选项 1、2 或 3 的优点/缺点是什么?
原文由 user993563 发布,翻译遵循 CC BY-SA 4.0 许可协议
null=True
在您的数据库的列上设置NULL
(相对于NOT NULL
)。 Django 字段类型的空白值,例如DateTimeField
或ForeignKey
将在数据库中存储为NULL
。blank
确定表单中是否需要该字段。这包括管理员和您的自定义表单。如果blank=True
则不需要该字段,而如果是False
该字段不能为空。两者的组合是如此频繁,因为通常如果您要允许表单中的字段为空白,您还需要您的数据库允许该字段的
NULL
值。例外是CharField
s 和TextField
s,它们在 Django 中 永远不会 保存为NULL
。空白值作为空字符串(''
)存储在数据库中。几个例子:
显然,这两个选项使用起来没有逻辑意义(尽管可能有一个用例
null=True, blank=False
如果您希望表单中始终需要一个字段,在通过类似的方式处理对象时是可选的贝壳。)CHAR
和TEXT
类型永远不会被 Django 保存为NULL
,所以null=True
是不必要的。但是,您可以手动将这些字段之一设置为None
以强制将其设置为NULL
。如果您有可能需要这样做的场景,您仍应包括null=True
。