Moh*_*miz 5 django postgresql django-rest-framework
我目前对在django rest-framework中使用JSONField很熟悉,但是我找不到更新存储json中密钥的任何直接方法。过滤JSONField的方法有很多,取决于它的内部键,但是似乎没有办法从已存储的JSONField中更改,更新或删除键。但是似乎postgres可以对json键做一些修改,如这个答案所解释。
是否有任何功能可以对JSONFields进行修改。如果没有任何直接命令可以执行此操作,那么实现JSONField修改的最佳方法是什么?
编辑:
例如,如果我有一个这样的模型:
class Thing(models.Model):
name = models.CharField()
properties = JSONField()
Run Code Online (Sandbox Code Playgroud)
在properties我存储这样的json:
{
"color" : "red",
"size" : "large",
"cost" : 1234
}
Run Code Online (Sandbox Code Playgroud)
然后,我想使用django命令将颜色更改为“绿色”。
小智 21
@tarasinf 和 @Vladius001 的方法jsonb_set也适用于 Django 的Func 表达式。
from django.db.models import F, Func, Value, JSONField
Thing.objects.update(
properties=Func(
F("properties"),
Value(["color"]),
Value("green", JSONField()),
function="jsonb_set",
)
)
Run Code Online (Sandbox Code Playgroud)
thing = Thing.objects.get(name="...")
thing.properties['color'] = 'green'
thing.save()
Run Code Online (Sandbox Code Playgroud)