当我们在Django中添加模型字段时,我们通常会这样写:
models.CharField(max_length=100, null=True, blank=True)
同样的做法是ForeignKey
, DecimalField
等等。以下之间的基本区别是什么:
-
null=True
only
-
blank=True
only
-
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
该字段的值。例外的是CharField
s and TextField
s,在 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(使用前将#替换为@)