下面是序列化查询集的代码:
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对象和dict组成的,有什么想法吗?
8条答案
按热度按时间vsnjm48y1#
simplejson
和json
不能很好地处理django对象。Django内置的serializers只能序列化填充了django对象的查询集:
在您的示例中,
self.get_queryset()
包含django对象和dicts的混合。一种选择是去掉
self.get_queryset()
中的模型示例,并使用model_to_dict
将其替换为dict:xkftehaa2#
最简单的方法是使用JsonResponse。
对于一个查询集,你应该为这个查询集传递一个
values
的列表,如下所示:7vux5j2d3#
我发现使用.values方法可以相当简单地完成此操作,该方法还提供命名字段:
必须使用“list”来获取可迭代的数据,因为“valuequeryset”类型只有在作为可迭代对象获取时才是一个dict。
文件:https://docs.djangoproject.com/en/1.7/ref/models/querysets/#values
57hvy0tb4#
从版本1.9开始更简单的官方获取json的方法
ev7lccsx5#
我们的js程序员要求我返回确切的JSON格式数据,而不是json编码的字符串。
下面是解决方案。(这将返回一个可以直接在浏览器中使用/查看的对象)
eblbsuwk6#
另一个在使用模型时求解的好方法是使用
values()
函数。cmssoen27#
首先,我向模型中添加了to_dict方法;
然后我有这个;
最后用这个类来序列化查询集。
这个效果很好
6kkfgxo08#
对于Django模型,尝试: