如何在Django中编写查询以根据JSON数据过滤查询集。

时间:2015-06-11 05:38:41

标签: json django django-orm

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

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

现在我想改进我的select查询,以便结果包含JSON字段所有的那些元组,

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

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

2 个答案:

答案 0 :(得分:0)

这取决于您使用的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")

答案 1 :(得分:0)

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

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    ... />

希望这对你有用。