如何使用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文档,它解释了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'}])

最新更新