您可以通过直接查找或使用注释来查询 Django 的 JSONField。现在我意识到,如果你注释一个字段,你可以进行各种复杂的查询,但是对于非常基本的查询,哪一种实际上是首选方法?
示例:假设我有这样的模型
class Document(models.Model):
data = JSONField()
然后我使用以下命令存储一个对象:
>>> Document.objects.create(data={'name': 'Foo', 'age': 24})
现在,我想要的查询是最基本的:查找所有文档 where data__name
is 'Foo'
。我可以通过两种方式做到这一点,一种使用注释,一种不使用,如下所示:
>>> from django.db.models.expressions import RawSQL
>>> Document.objects.filter(data__name='Foo')
>>> Document.objects.annotate(name = RawSQL("(data->>'name')::text", [])).filter(name='Foo')
那么具体有什么区别呢?如果我可以进行基本查询,为什么我需要注释?当然,前提是我不会进行复杂的查询。