【发布时间】:2015-12-08 10:34:37
【问题描述】:
这是我的模型:
class Question(models.Model):
options = models.TextField()
这是序列化程序:
class QuestionSerializer(ModelSerializer):
class Meta:
model = Question
这里是视图:
class QuestionView(ListAPIView):
queryset = Question.objects.all()
renderer_classes = (JSONRenderer,)
serializer_class = QuestionSerializer
在数据库内部,一条可用记录如下所示:
id options
1 [u'opt1', u'opt2']
当请求 api 时,这里是返回的 JSON:
{
"id": 1,
"options": "[u'opt1', u'opt2']"
}
我的问题是如何以 JSON 格式保存字符串并以不带 unicode 前缀的 JSON 格式检索它? (我需要支持unicode字符,所以不能简单地将用户提交的数据转成字符串)
更新:这是我目前找到的一种解决方案。使用django-jsonfield 定义您的字段:
from jsonfield import JSONField
class Question(models.Model)
options = JSONField()
然后,定义一个自定义序列化器字段:
from rest_framework import serializers
class JsonField(serializers.Field):
def to_representation(self, value):
return value
def to_internal_value(self, data):
return data
在序列化程序中使用此字段:
class QuestionSerializer(ModelSerializer):
options = JsonField()
class Meta:
model = Question
现在,如果您尝试存储然后从数据库中检索记录,您应该得到一个没有 unicode 前缀的 JSON 格式的字符串。
由于 django-jsonfield 正在寻找维护者 ATM,以防万一它过时了,这里是我正在使用的版本:
- Django 1.8.7
- django-jsonfield 1.0.3
- PostgresSQL 9.4.0.1
【问题讨论】:
标签: django django-rest-framework