のJSONFieldリストをフィルタリング:Djangoは、私は新しいJSONFieldとDjangoの1.9を実行して、次のテストモデルを持っているdicts
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")
そしてクエリセットでテストを持っている:私のような何かをしたいです。
どうすればいいですか?
私は実際にPostgreSQLのJSONField固有モデルフィールド( 'django.contrib.postgres.fields import JSONField')を既に使用しています。あなたの解決策は 'your_property'がわかっているとき(私の場合は' fixed_key_1'と 'fixed_key_2')に動作しますが、' your_property'(私の場合は 'random_key_#')を知らないとどうしたらいいですか? – Scentle5S
'{'fixed_key_1': 'foo2'}'をあなたのパラメタにして、コードをジェネリック関数で更新しました。 – DhiaTN
私は、特にあなたの 'your_property'を知らないのです。それは何でもかまいませんし、気にしなくても、深さに関係なくJSONFieldに任意の値の文字列が含まれているかどうかを知りたいだけです。 – Scentle5S