2016-04-17 50 views
1

我目前熟悉在Django rest-framework中使用JSONField,但我找不到任何直接更新存儲json中的密鑰的方法。有很多方法來過濾JSONField取決於它的內部鍵,但似乎沒有辦法從已存儲的JSONField中更改,更新或刪除鍵。但似乎postgres可以做一些json鍵的修改,如this answer解釋。更新Django rest框架中的JSONField

有什麼功能可以對JSONFields進行修改。如果沒有直接的命令來做到這一點,那麼實現JSONField修改的最好方法是什麼?

編輯:

舉個例子,如果我有這樣一個模型:

class Thing(models.Model): 
    name = models.CharField() 
    properties = JSONField() 

而在properties我存儲在一個JSON這樣的:

{ 
"color" : "red", 
"size" : "large", 
"cost" : 1234 
} 

然後我想通過使用django命令將顏色更改爲「綠色」。

+0

你可以舉一個你正在尋找什麼樣的更新的例子。最簡單的方法是將其讀入python,修改爲字典並保存。 – serg

+0

@serg請參閱編輯說明。 – MohsenTamiz

回答

5
thing = Thing.objects.get(name="...") 
thing.properties['color'] = 'green' 
thing.save() 
+0

對不起,我現在無法檢查您的答案,但我會盡快檢查並獲得您的反饋意見。 – MohsenTamiz

+0

請給你的代碼添加一些解釋! –

+0

@serg我檢查了你的答案,我認爲'thing'中的'properties'不像字典或JSON(它是一個'unicode'),所以你需要一些中間操作來將它改爲字典,然後再保存它。似乎django不支持這個,所以我必須做一些像你在這裏寫的東西。 – MohsenTamiz