<Django 对象 >不是 JSON 可序列化的 [英] <Django object > is not JSON serializable
问题描述
我有以下用于序列化查询集的代码;
I have the following code for serializing the queryset;
def render_to_response(self, context, **response_kwargs):
return HttpResponse(json.simplejson.dumps(list(self.get_queryset())),
mimetype="application/json")
以下是我的get_querset()
[{'product': <Product: hederello ()>, u'_id': u'9802', u'_source': {u'code': u'23981', u'facilities': [{u'facility': {u'name': {u'fr': u'Gxe9nxe9ral', u'en': u'General'}, u'value': {u'fr': [u'bar', u'rxe9ception ouverte 24h/24', u'chambres non-fumeurs', u'chambres familiales',.........]}]
我需要序列化的内容.但是它说无法序列化
.因为列表由 Django 对象和字典组成.有任何想法吗 ?
Which I need to serialize. But it says not able to serialize the <Product: hederello ()>
. Because list composed of both django objects and dicts. Any ideas ?
推荐答案
simplejson
和 json
不能很好地处理 django 对象.
simplejson
and json
don't work with django objects well.
Django 的内置 serializers 只能序列化填充了 django 对象的查询集:
Django's built-in serializers can only serialize querysets filled with django objects:
data = serializers.serialize('json', self.get_queryset())
return HttpResponse(data, content_type="application/json")
在您的情况下,self.get_queryset()
包含 django 对象和内部字典的混合.
In your case, self.get_queryset()
contains a mix of django objects and dicts inside.
一种选择是去掉 self.get_queryset()
中的模型实例,并使用 model_to_dict
将它们替换为 dicts:
One option is to get rid of model instances in the self.get_queryset()
and replace them with dicts using model_to_dict
:
from django.forms.models import model_to_dict
data = self.get_queryset()
for item in data:
item['product'] = model_to_dict(item['product'])
return HttpResponse(json.simplejson.dumps(data), mimetype="application/json")
希望有所帮助.
这篇关于<Django 对象 >不是 JSON 可序列化的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!