环境:
- Django 1.10.6
- psycopg2 2.7.1
- 在 macOS Sierra 上通过 Homebrew 安装 PostgreSQL 9.6.2
- 通过 Homebrew 安装 Python 3.6.0
示例模型:
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 = {'key1': 'value1'}
x.save()
并且查询按预期工作:
Foo.objects.filter(data__key1='value1').count()
# 1
但是,当我尝试从对象中检索该数据时,.data
属性的值是一个字符串:
from myapp.models import Foo
x = Foo.objects.get(id=1)
x.data
# '{"key1": "value1"}'
type(x.data)
# str
我希望在这里得到一个口述。当试图保存对象时,问题递归地变得更糟
x.save()
x = Foo.objects.get(id=1)
x.data
# '"{\\"key1\\": \\"value1\\"}"'
x.save()
x = Foo.objects.get(id=1)
x.data
# '"\\"{\\\\\\"key1\\\\\\": \\\\\\"value1\\\\\\"}\\""'
最佳答案
原来你不能在同一个项目中使用 django-jsonfield 和 Django 的原生 JSONField 或者你会遇到问题中描述的奇怪行为
https://bitbucket.org/schinckel/django-jsonfield/issues/57/cannot-use-in-the-same-project-as-djangos
关于python - 为什么 Django 将 postgres JSONField 值作为字符串返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42771437/