Django 中 null=True 和 Blank=True 有什么区别?

2023-11-25

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

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

同样的做法是ForeignKey, DecimalField等等。以下之间的基本区别是什么:

  1. null=True only
  2. blank=True only
  3. null=True and blank=True

对于不同的(CharField, ForeignKey, ManyToManyField, DateTimeField)字段?使用选项 1、2 或 3 的优点/缺点是什么?


null=True sets NULL(相对NOT NULL)在数据库的列上。 Django 字段类型的空白值,例如DateTimeField or ForeignKey将被存储为NULL在数据库中。

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

两者的组合如此频繁,因为通常如果您要允许表单中的字段为空,那么您还需要数据库允许NULL该字段的值。例外的是CharFields and TextFields,在 Django 中是never另存为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 and TEXT类型永远不会另存为NULL通过姜戈,所以null=True是不必要的。但是,您可以手动将这些字段之一设置为None强制将其设置为NULL。如果您有可能需要这样做的情况,您仍然应该包括null=True.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 中 null=True 和 Blank=True 有什么区别? 的相关文章

随机推荐