metadata
Django のモデルで呼び出される 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 にいくつかのコメントを追加して、各配列にオブジェクトが 1 つしかないことを明確にしました。任意のインデックスで「プロット」を見つけようとしており、それを含む任意のインデックスで「externalData」を見つけようとしています"source": {"name": "FINDME"}
。