优草派 > Python

django数据模型中null和blank的区别说明

刘梦婷         优草派

Django 是 Python Web 开发框架中的一个重要代表。在 Django 的数据库操作中,有 one-to-one、many-to-one、many-to-many 等关系型字段,这些字段中均有 null 和 blank 两个属性。二者的区别十分微妙但却十分重要,本文将以 Django 数据模型中 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() 方法保存都可以

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 则侧重于表单层面的控件外观和控制,但是二者之间的关系是十分密切的。对于开发者来说,要在数据设计和表单设计时注意这两个属性的设置,才能更好地提升系统的稳定性和健壮性。

  • 微信好友

  • 朋友圈

  • 新浪微博

  • QQ空间

  • 复制链接

取消
广告
? x
广告
? x
广告
? x
【原创声明】凡注明“来源:优草派”的文章,系本站原创,任何单位或个人未经本站书面授权不得转载、链接、转贴或以其他方式复制发表。否则,本站将依法追究其法律责任。

客服热线:0731-85127885

湘ICP备 19005950号-1  

工商营业执照信息

违法和不良信息举报

举报电话:0731-85127885 举报邮箱:tousu@csai.cn

优草派  版权所有 © 2024