【问题标题】:How do I write a query in Django to filter queryset on the basis of JSON data.?如何在 Django 中编写查询以根据 JSON 数据过滤查询集。?
【发布时间】:2015-06-11 05:38:40
【问题描述】:

我的模型中有一个 JSON 字段,它存储如下数据:

{  "old_val": {"status": value1}, 
   "new_val": {"status": value2}
}

现在我想优化我的选择查询,以便结果包含所有那些 JSON 字段具有的元组,

["new_val"]["status"] = value2 and ["old_val"]["status"] !=value1

如何在 django 中编写此查询。 ???

【问题讨论】:

    标签: json django django-orm


    【解决方案1】:

    这取决于您使用的是什么 JSONField 以及什么数据库。其中一些只是将 json 保存到文本字段。如果是这种情况,您无法访问数据库中的部分数据,因此无法对其进行过滤。但是,如果您使用的是 PostgreSQL 9.3+,则可以使用它的 JSON 支持和额外的 its operators

    Something.objects.extra(where=["data->'new_val'->>'status' = %s"], params=["foo"])
    

    请注意,PostgreSQL 9.4 的运算符比 9.3 多。

    你也可以看看django-pgjson,它将一些postgresql json 操作符的使用封装到自定义查找中(Django 1.7 中的新功能):

    Something.objects.filter(data__at_new_val__at_status="foo")
    

    【讨论】:

      【解决方案2】:

      jsonField 基本上是一个字符串。因此,您必须执行将在任何 StringField 上执行的查询。

      needed_objects = YourModel.objects.filter(jsonfield__contains={"status": value2}).exclude(jsonfield__contains={"status": value1})
      

      希望这对你有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-07-19
        • 1970-01-01
        • 1970-01-01
        • 2019-10-08
        • 2013-06-11
        • 2020-08-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多