<Django 对象> 不是 JSON 可序列化的

新手上路,请多包涵

我有以下用于序列化查询集的代码:

 def render_to_response(self, context, **response_kwargs):

    return HttpResponse(json.simplejson.dumps(list(self.get_queryset())),
                        mimetype="application/json")

以下是我的 get_quersety()

 [{'product': <Product: hederello ()>, u'_id': u'9802', u'_source': {u'code': u'23981', u'facilities': [{u'facility': {u'name': {u'fr': u'G\xe9n\xe9ral', u'en': u'General'}, u'value': {u'fr': [u'bar', u'r\xe9ception ouverte 24h/24', u'chambres non-fumeurs', u'chambres familiales',.........]}]

我需要序列化。但它说无法序列化 <Product: hederello ()> 。因为列表由 django 对象和 dicts 组成。有任何想法吗?

原文由 tuna 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 785
2 个回答

simplejsonjson 不能很好地处理 django 对象。

Django 的内置 序列化 器只能序列化由 django 对象填充的查询集:

 data = serializers.serialize('json', self.get_queryset())
return HttpResponse(data, content_type="application/json")

在您的情况下, self.get_queryset() 内部包含 django 对象和 dicts 的混合。

一种选择是删除 self.get_queryset() 中的模型实例,并使用 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")

希望有帮助。

原文由 alecxe 发布,翻译遵循 CC BY-SA 3.0 许可协议

最简单的方法是使用 JsonResponse

对于查询集,您应该为该查询集传递 values 的列表,如下所示:

 from django.http import JsonResponse

queryset = YourModel.objects.filter(some__filter="some value").values()
return JsonResponse({"models_to_return": list(queryset)})

原文由 YPCrumble 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题