在 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"}])
我正在尝试查询 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"}])