Django小技巧08: Blank or Null
Posted October 26, 2018
Django Model API 中提供了blank
和null
两个参数, 非常容易混淆。当我第一次使用 Django 的时候, 总是不能恰当的使用这两个参数。
看起来两者都做了几乎相同的事情, 但是这两者还是有区别的:
- null: 数据库相关; 定义数据库字段的值是否接受空值。
- blank: 验证相关, 当调用
form.is_valid()
时, 将会判断值是否为空.
虽然两者的是有区别的, 但一个拥有null=True
和blank=False
的字段是完全没有问题的。 在数据库级别上, 该字段可以为 NULL, 但在应用程序级别上, 它是必填字段(前提你通过 Django 标准的 Form 进行判断)。
大多数开发人员都对基于字符串的字段(CharField
和TextField
)定义null=True
, 这其实是没有必要的, 应该避免这样做,因为 Django约定使用空字符串设置空值, 而非Null.
所以, 如果你想设置一个基于字符的字段可以为空,那么你应该这样做:
默认值
- null: False
- blank: False
NullBooleanField
当您需要为BooleanField
字段设置允许为空时, 您应该使用NullBooleanField
代替,而非通过参数.