gpt4 book ai didi

python - Django 过滤器 JSONField 字典列表

转载 作者:太空狗 更新时间:2023-10-29 17:39:52 24 4
gpt4 key购买 nike

我使用新的 JSONField 运行 Django 1.9 并具有以下测试模型:

class Test(TimeStampedModel):
actions = JSONField()

假设操作 JSONField 看起来像这样:

[
{
"fixed_key_1": "foo1",
"fixed_key_2": {
"random_key_1": "bar1",
"random_key_2": "bar2",
}
},
{
"fixed_key_1": "foo2",
"fixed_key_2": {
"random_key_3": "bar2",
"random_key_4": "bar3",
}
}
]

我希望能够过滤列表中每个项目的 foo1 和 foo2 键。当我这样做时:

>>> Test.objects.filter(actions__1__fixed_key_1="foo2")

测试在查​​询集中。但是当我这样做时:

>>> Test.objects.filter(actions__0__fixed_key_1="foo2")

不是,这是有道理的。我想做类似的事情:

>>> Test.objects.filter(actions__values__fixed_key_1="foo2")

或者

>>> Test.objects.filter(actions__values__fixed_key_2__values__contains="bar3")

并在查询集中进行测试。

知道这是否可以完成以及如何完成吗?

最佳答案

如果您不想通过字典数组中的某个字段来过滤数据,您可以尝试以下查询:

Test.objects.filter(actions__contains=[{'fixed_key_1': 'foo2'}])

它将列出所有 Test 对象,在 actions 字段中至少有一个对象包含值 foo2< 的键 fixed_key_1/.

即使您不知道实际的索引,它也应该适用于嵌套查找:

Test(actions=[
{'fixed_key_1': 'foo4', 'fixed_key_3': [
{'key1': 'foo2'},
]}
}).save()

Test.objects.filter(actions__contains=[{'fixed_key_3': [{'key1': 'foo2'}]}])

简单来说,包含将忽略其他所有内容。

不幸的是,如果嵌套元素是一个对象,您必须知道键名。在这种情况下,按值查找将不起作用。

关于python - Django 过滤器 JSONField 字典列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34358278/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com