Django JSONField过滤

时间:2016-04-03 19:07:37

标签: python django postgresql

我正在使用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']

1 个答案:

答案 0 :(得分:22)

根据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'}])