2015-06-11 104 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}) 

希望這對你有好處。