Django 是 Python Web 开发框架中的一个重要代表 。在 Django 的数据库操作中,有 one-to-one、many-to-one、many-to-many 等关系型字段 , 这些字段中均有 null 和 blank 两个属性 。二者的区别十分微妙但却十分重要,本文将以 Django 数据模型中 null 和 blank 的区别为主题,从多个角度进行分析解释 。

1.定义
- null:指的是数据库层面的空值,即某个字段的值为空
- blank:指的是表单层面的空值 , 即某个字段在表单中允许为空
注意:在数据模型中,null=True 表示数据库中对应的字段可以为空,blank=True 表示表单中对应的字段可以为空,如果同时设置两个属性,则该字段在数据库和表单中均可以为空
2.在模型级别的区别
null 与 blank 在数据模型中的区别主要在于:
- null:用于控制数据库层面的数据约束 。如果 null=True,那么 django 会对该字段在数据库中实际存储的效果具有控制和约束作用 。比如 , 在执行 save() 方法时,如果该字段数据为空,则会在数据库中存储为 NULL,而不是空字符串或其他有值的类型
- blank:用于控制表单层面的控件外观 。如果 blank=True,那么 django 会在表单中为该字段创建一个可跳过的空间,即该字段在表单中可以为空或者什么都不填 , 但是在数据库中,该字段仍然是需要被真实定义并存储的 , 定义这个字段时需要考虑其是否可为空,在设计表单时需要考虑用户是否需要填写该字段 。如果 blank=False,那么在设计表单时该字段必须被填写
3.在浏览器表单提交中的区别
当我们在浏览器中向一个模型的 fields 发送 POST 请求时,两者的区别可以通过以下场景进行验证:
- null=False,blank=False
1)字段定义:`field = models.CharField()`
2)保存数据:直接提交或者通过 save() 方法保存都可以
【django数据模型中null和blank的区别说明】
3)场景验证:当出现 fields 不足等提交错误时,系统会返回对应的错误提示
- null=True,blank=False
1)字段定义:`field = models.CharField(null=True)`
2)保存数据:直接提交或者通过 save() 方法保存均不能自动实现字段的 null 执行(要等到我们在数据库中看到该字段的存储才能真正 null)
3)场景验证:除非使用自定义验证,否则不会影响控件表单验证的性能
- null=False,blank=True
1)字段定义:`field = models.CharField(blank=True)`
2)保存数据:可以在表单中不填写该字段进行保存或者在 save() 方法中显式传入参数为空字符串进行保存
3)场景验证:控件表单验证正常,但只能通过数据库级别的唯一与否来判断该字段是否为空
- null=True,blank=True
1)字段定义:`field = models.CharField(blank=True, null=True)`
2)保存数据:完全可以在表单中不填写该字段进行保存,入库后相当于是否执行数据库层面上的 null 设置 取决于我们自身的设计或者约束
3)场景验证:控件表单验证可做可不做,影响线上环境在于是否涉及到唯一约束
4.小结
在我们进行 Django 应用开发中,如何更好地使用数据模型中 null 和 blank 这两个属性的区别 , 尤其是在不同的场景中,是十分重要的 。其中,null 主要用于数据库层面的数据约束 , 而 blank 则侧重于表单层面的控件外观和控制,但是二者之间的关系是十分密切的 。对于开发者来说,要在数据设计和表单设计时注意这两个属性的设置,才能更好地提升系统的稳定性和健壮性 。
猜你喜欢
- django十个实战项目?
- mysql存的数据库在哪里?
- TensorFlow——Checkpoint为模型添加检查点的实例
- mysql出现的问题及解决方法?
- python生成txt文件?
- mongodb 上亿数据量?
- python 代理ip设置?
- mongodb批量更新数据?
- Django自定义分页与bootstrap分页结合
- python 读取数据文件路径?
