区分null=True, blank=True in django
当我们在Django中添加数据库字段时,通常会这样写:
models.CharField(max_length=100, null=True, blank=True)
同样是与做ForeignKey,DecimalField
等有什么根本区别在其
- null=True only
- blank=True only
- null=True, blank=True
在相对于不同的(
CharField,ForeignKey,ManyToManyField,DateTimeField
)字段。使用1/2/3有什么优点/缺点?
回答:
null=True
在数据库的列中设置NULL
(与相对NOT NULL
)。Django
字段类型(例如DateTimeField
或)的空白值ForeignKey
将存储NULL在数据库中。
blank
确定是否需要表单中的字段。这包括管理员和你的自定义表单。如果blank=True
是,则不需要该字段,而如果是,则False
该字段不能为空。
两者的组合是如此频繁,因为通常如果你要允许表单中的字段为空白,则还需要数据库来允许NULL该字段的值。CharFields
和TextFields
是例外,在Django中从不将其保存为NULL
。空值作为空字符串(''
)存储在DB中。
一些例子:
models.DateTimeField(blank=True) # raises IntegrityError if blankmodels.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
类型永远不会NULL
被Django 保存,因此null=True
没有必要。但是,你可以手动设置这些字段之一None
以强制将其设置为NULL
。如果你有可能需要这样做的情况,则仍应包括null=True
。
以上是 区分null=True, blank=True in django 的全部内容, 来源链接: utcz.com/qa/412989.html