3

metadataDjango のモデルで呼び出される 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"あるモデルをフィルタリングできるようにしたいと考えています。externalDataplots

最初に試した

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"}

4

1 に答える 1