python - Django JSONField 过滤

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

最佳答案

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

关于python - Django JSONField 过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36389871/

相关文章:

python - 我什么时候应该在 Python 中使用类型检查(如果有的话)?

python - Maya:如何使用python导入fbx?

python - 用于创建查询的 psycopg2 变量格式

django - Heroku Push 导致 django 的 slug-compiler 出现超时错误

python - 如果我有两个模型,模型 A 和模型 B,并且我希望模型 A 的字段平均值为模型 B 中字段的值

postgresql - PostgreSQL 数据库中具有大小(相对和绝对)的模式列表

postgresql - PostgreSQL 插入后输出的结果到底是什么意思?

python - 根据许多不同列的条件从数据框中删除行

python - PyTorch 数据加载器显示字符串数据集的奇怪行为

mysql - 如何用 Django 替换查询集中的某些值?