当我们在 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 的优点/缺点是什么?
最佳答案
null=True
在数据库中的列上设置 NULL
(相对于 NOT NULL
)。 DateTimeField
或 ForeignKey
等 Django 字段类型的空白值将在数据库中存储为 NULL
。
blank
确定表单中是否需要该字段。这包括管理员和您的自定义表单。如果 blank=True
则不需要该字段,而如果它是 False
则该字段不能为空。
两者的组合是如此频繁,因为通常如果您要允许表单中的字段为空白,您还需要您的数据库允许 NULL
值那个领域。异常(exception)是 CharField
s 和 TextField
s,它们在 Django 中从不保存为 NULL
。空白值作为空字符串 (''
) 存储在数据库中。
几个例子:
models.DateTimeField(blank=True) # raises IntegrityError if blank
models.DateTimeField(null=True) # NULL allowed, but must be filled out in a form
显然,这两个选项的使用在逻辑上没有意义(尽管如果您希望表单中始终需要一个字段,则可能会有 null=True, blank=False
的用例, 在通过 shell 之类的东西处理对象时是可选的。)
models.CharField(blank=True) # No problem, blank is stored as ''
models.CharField(null=True) # NULL allowed, but will never be set as NULL
CHAR
和 TEXT
类型永远不会被 Django 保存为 NULL
,因此 null=True
是不必要的。但是,您可以手动将这些字段之一设置为 None
以强制将其设置为 NULL
。如果您有可能需要这样做的场景,您仍应包含 null=True
。
关于python - Django中null=True和blank=True有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8609192/