这是我的模特:
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格式保存字符串并以JSON格式检索它而不使用unicode前缀? (我需要支持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,以防它变得过时,以下是我使用的版本:
答案 0 :(得分:1)
以UTF-8编码unicode字符串。 unicode前缀将消失,字符串仍将支持unicode字符:
>>> msg = u"Hello"
>>> msg = msg.encode("utf-8")
>>> msg
'Hello'
由于您需要转换dict中的所有值,因此您可能需要编写一个函数来执行此操作。但是这里已经处理好了:How to get string objects instead of Unicode ones from JSON in Python?