首页 > 解决方案 > Django JsonField 数组数据查询

问题描述

我在 Postgres db 中有一个 jsonfield,数据如下:

income_info = [
  {
    "id": "1",
    "name": "A",
    "min_income": 22000
  },
  {
    "id": "2",
    "name": "B",
    "min_income": 40000
  },
  {
    "id": "3",
    "name": "C",
    "min_income": 22000
  }
]

现在想在 django orm 查询集上使用 gte 和 lte。已经试过了

Employee.objects.filter(income_info__min_income__lte = 4000000)

但根本没有工作。

模型.py:

class Employee(models.Model):
    institute = models.ForeignKey(Institute, on_delete=models.DO_NOTHING)
    income_info = JSONField(default=list)
    others = models.TextField(null=True)

标签: djangopostgresql

解决方案


在 django 的查询 JsonFields的文档中:

如果键是整数,它将被解释为数组中的索引查找

由于您的 json 数据是 json 数据列表,因此您需要这样的查询:

Employee.objects.filter(income_info__0__min_income__lte=4000000)

推荐阅读