【问题标题】:Django JsonField Array data queryDjango JsonField 数组数据查询
【发布时间】:2019-07-31 12:44:12
【问题描述】:

我在 Postgres 数据库中有一个 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)

但根本没有用。

models.py:

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

【问题讨论】:

  • 你能分享你的模型吗?
  • 请检查更新的问题

标签: django postgresql


【解决方案1】:

在 django 的 documentation 中查询 JsonFields:

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

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

Employee.objects.filter(income_info__0__min_income__lte=4000000)

【讨论】:

  • 非常感谢
  • 有没有办法只检查 id 为 3 的对象?考虑到我不知道它在数组中的位置?
  • 我不确定你是否可以这样做。也许你可以在你的 json 模式中添加一个标识符字段,并在你的查询中有一个单独的过滤器?
猜你喜欢
  • 2016-05-10
  • 2018-10-19
  • 2022-11-30
  • 1970-01-01
  • 2018-10-02
  • 2021-11-30
  • 2020-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多