Shawn's Blog
目录 · 2 节

Django 与 Django REST framework 中的这些 "空"

0X00 Django Model中的空

Django的Model常见两个与空有关的参数:nullblank。其中null是数据库层面的是否允许为Null,而blank则将空处理为空值。比如一个CharFieldblank=True,那么这个字段在没有赋值的情况下入库,这个字段就会是空字符串而不是Null。

python
1In [13]: s = Student()
2
3In [14]: s.age=1
4
5In [15]: s.save()
6
7In [16]: s.name
8Out[16]: u''

如果将blank=False再不赋值该字段进行保存则入库的就是Null

python
1In [3]: s = Student()
2
3In [4]: s.age = 1
4
5In [5]: s.save()
6
7In [6]: s.name
8
9In [7]: type(s.name)
10Out[7]: NoneType

所以换句话说,null=True是数据库层面允许存储Null,而blank=True则是允许存入”空字符串”等表示空的值。

0X01 Django REST framework中的空

在Django REST framework的serializer中的字段,有三个与空有关的,都是在创建或更新中生效。分别是allow_blank/allow_null/require这三个。其中allow_blank=True表示着CharField/ListField等允许传入""/[]等空值;allow_null=True表示着允许传入{"name": null, "age": null}这种null空;require=True则表示着字段必填,如果name字段被设定了require=True那么在POST/PUT/PATCH等创建或更新数据时这个字段是必须要填写的。

本文标题
Django 与 Django REST framework 中的这些 "空"
文章作者
Shawn
版权声明
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

如果这篇文章对你有帮助,可以请我喝杯咖啡 ☕

评论