web-dev-qa-db-ja.com

Django JSONFieldフィルタリング

私は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']
15
ezdookie

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'}])
28
Airith