JSONField
本篇的例子以下面这个模型为基础:
from django.db import models
class Dog(models.Model):
name = models.CharField(max_length=200)
data = models.JSONField(null=True)
def __str__(self):
return self.name
保存和查询None值
在使用JSONField时,要注意空值
的处理,注意区分SQL NULL
和JSON null
保存None值
我们首先创建两个Dog实例
from django.db.models import Value, JSONField
>>> Dog.objects.create(name="Max", data=None) # SQL NULL.
<Dog: Max>
>>> Dog.objects.create(name="Archie", data=Value(None, JSONField())) # JSON null.
<Dog: Archie>
观察两个实例在数据库中的表现,可以发现SQL NULL
和JSON null
是不一样的。
查询None值
查询时,None
值将被解释为JSON null
,要查询SQL NULL
,需要使用isnull
:
>>> Dog.objects.filter(data=None)
<QuerySet [<Dog: Archie>]>
>>> Dog.objects.filter(data=Value(None, JSONField()))
<QuerySet [<Dog: Archie>]>
>>> Dog.objects.filter(data__isnull=True)
<QuerySet [<Dog: Max>]>
>>> Dog.objects.filter(data__isnull=False)
<QuerySet [