在 Django 模型 JSONField 中的字典列表中查询

Querying within a list of dicts within a Django model JSONField

我正在尝试查询 Django JSONField 中字典列表中的一个元素。我可以找到与我类似的问题,但没有一个涵盖我正在尝试做的事情。看起来它应该很简单而且相当普遍,所以我怀疑我遗漏了一些简单的东西。

所以。稍微扩展 Django docs

中的示例

假设我有一个带有名为 data 的 JSONField 的 Dog 模型,它有一些数据如下:

Dog.objects.create(name='Rufus',
    data = {"other_pets":
            [{"name", "Fishy"},
             {"name": "Rover"},
             {"name": "Dave"}]}
)

有一个名为 "other_pets" 的键,它是一个字典列表。我想编写一个查询,其中 returns 任何模型,其中包含带有键 name=="Dave"

的字典

如果我通过索引引用元素,我可以直接这样做,例如:

Dog.objects.filter(data__other_pets__2="Dave")

我会 return 行,但我需要引用列表元素的索引,以及我正在查找的项目的位置和列表的大小因型号而异。

我想也许:

Dog.objects.filter(data__other_pets__contains={"name":"Dave"})

可以,但是 return 没有元素。

我想做的事情可行吗?另外,是否可以为这样的查询添加索引?

谢谢!

由于 other_pets 是一个列表,您应该将列表传递给 contains 过滤器

Dog.objects.filter(data__other_pets__contains=[{"name":"Dave"}])