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']

回答:

根据django JSONField

docs,它解释说该data结构与python本地格式匹配,查询时的方法略有不同。

如果您知道JSON的结构,则还可以过滤键,就好像它们是相关字段一样:

object.filter(data__animal='cat')

object.filter(data__name='tom')

通过数组访问:

object.filter(data__0__animal='cat')

您的包含示例几乎是正确的,但是您的数据在列表中,并且需要:

object.filter(data__contains=[{'animal': 'cat'}])

以上是 Django JSONField过滤 的全部内容, 来源链接: utcz.com/qa/404156.html

回到顶部