Django: Model: Null and Blank

 20th August 2020 at 2:19pm

nullblank 是 Django model 中的 field 的参数。

null 是纯数据库相关的,表示该 field 对应的数据库字段可以为 NULL,跟 Django 本身的逻辑没有关系。blank 跟数据库无关,仅跟 Django Form 的数据校验有关,如果 blank 为 True,则提交表单数据到 Django form 时 Django 可以接受该字段没有值。

对于非关系字段,要表达一个字段「没有值」的最佳实践是:

  • 对于字符串类型的 field(CharFieldTextField),不要置 null 为 True,使用 blank 为 True 即可,避免需要同时判断 null 及空字符串
  • 对于其他类型,应该 同时 置 null 和 blank 为 True。因为:
    • 一些类型的初始值往往不表示空,比如你给 IntegerField 置 0 不能表示它为空
    • 一些类型没有合乎逻辑的初始值,比如你很难说 DateField 的初始值是多少

对于关系字段:

  • ForeignKey 可以同时置 null 及 blank 为 True,表示可以无关联的外键(参考 这里
  • OneToOneFieldForeignKey 一致
  • ManyToManyField 字段无法置 null 及 blank 为 True,因为它并不对应一个数据库字段,而是对应一张单独的数据表