环境:
示例模型:
from django.db import models
from django.contrib.postgres.fields import JSONField
class Foo(models.Model):
data = JSONField()
当我尝试创建一个对象时,一切都按预期工作:
from myapp.models import Foo
x = Foo()
x.data = {'some key': 'some value'}
x.save()
但是,当我尝试检索该数据时,.data
属性的值是一个字符串:
from myapp.models import Foo
x = Foo.objects.order_by('-id')[0]
# returns "{'some key': 'some value'}"
x.data
# returns <class 'str'>
type(x.data)
我的问题:如何取回dict
以便我可以操作JSON字段中的数据?
编辑:使用json.loads()
失败,因为属性名称和值用单引号括起来而不是双引号:
import json
json.loads(x.data)
# JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
我可以使用eval()
,但这显然非常危险。
答案 0 :(得分:1)
事实证明,我编写的用于创建此字段的自定义DRF序列化程序(从POST执行的操作产生到另一个模型的detail_route
)使用的是DRF的CharField
而不是JSONField
。糟糕!