【发布时间】:2018-05-24 15:54:28
【问题描述】:
我在 Django 中的模型上有一个名为 metadata 的 JSONField。
该字段中的数据可能看起来像这样
{
"vis": {
"plots": [
// some objects here
{
"id": 1,
"x": "foo",
"y": "bar",
"externalData": [
// some objects here
{
"x": "fa",
"y": "so",
"source": {
"name": "FINDME",
"location": "some other address"
}
},
// some more objects here
]
},
// some more objects here
],
"somethingElse": []
},
"moreStuff": {}
}
我希望能够过滤"name": "FINDME" 在externalData 对象(在任何索引处)、在plots 对象内(也在任何索引处)的模型。
我最初尝试过
MyModel.objects.filter(metadata__vis__plots__externalData__source__name='FINDME')
不好。然后我尝试了
MyModel.objects.filter(metadata__vis__plots__externalData__source__contains={'name':'FINDME'})
不好。然后我尝试了
MyModel.objects.filter(metadata__vis__plots__externalData__contains=[{'source': {'name':'FINDME'}}])
仍然没有运气。最后,我尝试了
MyModel.objects.filter(metadata__vis__plots__contains=[{'externalData':[{'source': {'name': 'FINDME'}}]}])
仍然没有命中。
显然,我做错了。
有什么想法吗?
编辑:我在 JSON 中添加了一些 cmets,以明确我的每个数组中不仅有一个对象。我正在尝试在任意索引处查找“情节”,在包含"source": {"name": "FINDME"} 的任意索引处查找“externalData”。
【问题讨论】:
-
我认为它可以帮助使用stackoverflow.com/questions/34358278/…
-
我最初的尝试是在阅读该页面后进行的。我的问题是匹配 any 索引。我似乎无法解决我的查询以使其发挥作用。