python - Django中null=True和blank=True有什么区别?

标签 python django django-models

当我们在 Django 中添加模型字段时,我们一般会这样写:

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

ForeignKeyDecimalField等也是如此,它们的基本区别是什么:

  1. null=True 仅限
  2. blank=True 仅限
  3. null=Trueblank=True

关于不同的(CharFieldForeignKeyManyToManyFieldDateTimeField)字段?使用选项 1、2 或 3 的优点/缺点是什么?

最佳答案

null=True 在数据库中的列上设置 NULL(相对于 NOT NULL)。 DateTimeFieldForeignKey 等 Django 字段类型的空白值将在数据库中存储为 NULL

blank 确定表单中是否需要该字段。这包括管理员和您的自定义表单。如果 blank=True 则不需要该字段,而如果它是 False 则该字段不能为空。

两者的组合是如此频繁,因为通常如果您要允许表单中的字段为空白,您还需要您的数据库允许 NULL 值那个领域。异常(exception)是 CharFields 和 TextFields,它们在 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

CHARTEXT 类型永远不会被 Django 保存为 NULL,因此 null=True 是不必要的。但是,您可以手动将这些字段之一设置为 None 以强制将其设置为 NULL。如果您有可能需要这样做的场景,您仍应包含 null=True

关于python - Django中null=True和blank=True有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8609192/

相关文章:

Django - 如何将模型的选择显示为复选框

python - 对象请求的 Django 动态过滤器数

python - 在 N 次试验中找到函数最大返回值的优雅方法

python - 在 Django 模型中使用自己的字段定义其他字段

python - 如何修复 Pandas 中的 ValueError

python - 如何从 django 中的低级缓存 API 中删除特定键

django - 2 个 django 项目,将一个模型从一个模型导入另一个模型

python - Python Pandas 中按对象分组的时差

python - PyCharm 2018 中测试失败的两次回溯

python - 大列表的最大递归