为什么django模型有空白和空的不同选项?

Leo*_*opd 10 django django-models

在django模型中定义字段时,有两种方法可以说该字段是空的. null表示它在数据库中可以为空,并blank表示该字段在表单中可以为空.为什么这些不同?每次我设置一个而不是另一个出错.允许它们不同似乎只是邀请表单的问题,允许您创建数据库不接受的对象.

换句话说,当你会永远使用null=True,blank=Falsenull=False,blank=True在Django模型?

Chr*_*att 40

它们有两个完全不同的含义:

空白:确定是否应在表单中按要求验证字段.False表示如果不提供表单将生成错误,而True表示允许空值.

null:确定是将字段设置为DB NULL还是NOT NULLDB级别.这与表单验证无关.

一些例子:

blank=True, null=False如果IntegrityError该字段不是CharField或TextField,则会随时将该字段留空.这两个字段在空时发送''(空字符串)而不是NULLDB.

blank=False, null=True将始终要求以所有形式填写该字段(表单将ValidationError在字段上提升),即使允许该列NULL.但是,这仅适用于表格.您可以手动将属性设置为None并将其保存在表单之外(例如,在shell中).

  • 我觉得你搞砸了.`blank = False,null = True`根本不危险.这只是轻微的不合逻辑,因为它会强制为可空字段赋值.但是,有些情况可能是必要的,请记住,只有在使用表单时才需要.`空=真,空= FALSE`,然而,*能*导致IntegrityError,但CHAR和TEXT域类型,Django的总是那么它与那些字段类型相当普遍的存储空字符串,而不是`NULL`. (3认同)

sec*_*ond 4

null=False, blank=True对于 s 来说很常见CharField,其中空白答案作为空白字符串而不是 null 存储在数据库中。反过来使用就没有多大意义。

对于非字符串字段,非答案存储为null,因此您需要两者。

  • 为什么人们会想要这种行为呢?在数据库中存储一堆空白字符串而不是根本没有任何值有什么好处? (4认同)