2015-06-11 100 views
2

我在我的模型中的JSON字段存储这样的数据:如何在Django中编写查询以基于JSON数据过滤查询集?

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

现在我想,这样的结果包含所有元组,其JSON字段来改进我的选择查询,

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

如何在django中编写这个查询。 ???

回答

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") 
0

jsonField基本上是一个字符串。所以,你必须执行你在任何StringField上执行的查询。

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

希望这对你有好处。