私はPostgreSQLとDjango 1.9、JSONFieldからのこの新しいフィールドを使用しています。したがって、次のデータを取得しました。
id|data
1 |[{'animal': 'cat', 'name': 'tom'}, {'animal': 'dog', 'name': 'jerry'}, {'animal': 'dog', 'name': 'garfield'}]
このjsonのリストでフィルタリングする方法を理解しようとしています。私は次のようなことを試しました:object.filter(data__contains={'animal': 'cat'}
しかし、私はこれが方法ではないことを知っています。また、私はこの値を取得してコードでフィルタリングすることを考えていました:
[x for x in data if x['animal'] == 'cat']
Django JSONField docs によると、data
構造がpythonネイティブ形式と一致すること、クエリ時の少し異なるアプローチ。
JSONの構造がわかっている場合は、キーを関連フィールドのようにフィルタリングすることもできます。
object.filter(data__animal='cat')
object.filter(data__name='tom')
アレイアクセス:
object.filter(data__0__animal='cat')
あなたの contains の例はほぼ正しいですが、あなたのデータはリストにあり、以下を必要とします:
object.filter(data__contains=[{'animal': 'cat'}])