irpas技术客

django之 TypeError: Object of type QuerySet is not JSON serializable,json 不能将Quer

未知 8118

在启动django框架运行之后,我进行对http://127.0.0.1:8000/home/query/地址的访问,这个页面中使用了ajax请求,本来是通过ajax请求路口到后端,然后后端从数据库中查找数据再返回到前端。

我在项目的app里的views.py文件中的关于ajax请求的函数是这样写的:

@csrf_exempt def home_ajax(request): """从前端ajax接收数据,处理之后再传递到前端生成数据可视化图""" print(dict(request.POST)) if request.POST['road_id'] == 0: # 请选择所在的路口名称! return redirect(reverse("home_query") + "?errinfo=1") data_list = dict(request.POST) # 转为字典格式 # 在数据库中查找相应的路口 road = Effect.objects.get(road_id=data_list['road_id'][0]).toDict() # backbone_list = Backbone.objects.filter(backbone_id=road[0].backbone_id) # backbone_optimized_list = BackboneOptimized.objects.filter(backbone_id=road.backbone_id) configuration_list =serializers.serialize("json", Configuration.objects.filter(effect_id=data_list['road_id'][0])) summary_list = serializers.serialize("json", Summary.objects.all()) summary_optimized_list = serializers.serialize("json", SummaryOptimized.objects.all()) print(type(road)) print(json.dumps(road)) # print(backbone_list) print(summary_list) print(summary_optimized_list) print(configuration_list) result = { "status": True, "data": { "road":road, "configurationlist":configuration_list, # # "backbonelist":backbone_list, # # "backboneOptimizedlist": backbone_optimized_list, "summarylist":summary_list, "summaryOptimizedlist":summary_optimized_list, } } return JsonResponse(result)

正常情况下,应该会在console中打印传送过来的数据信息。但是出现了一个错误:TypeError: Object of type QuerySet is not JSON serializable,json 不能将QuertSet序列化

我右击“检查”打开浏览器源码,在console中发现html文件中出现了ajax返回数据失败,这是为什么呢?

而且在PyCharm里也报错了:

Internal Server Error: /home/ajax/ Traceback (most recent call last): File "D:\env\first\lib\site-packages\django\core\handlers\exception.py", line 34, in inner response = get_response(request) File "D:\env\first\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response response = self.process_exception_by_middleware(e, request) File "D:\env\first\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "D:\env\first\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view return view_func(*args, **kwargs) File "D:\太原理工2018\代码\baizhi\tyut2018\PythonWeb\zx\DjangoProject01\home\views.py", line 52, in home_ajax "configurationlist":json.dumps(configuration_list), File "D:\python3.9\lib\json\__init__.py", line 231, in dumps return _default_encoder.encode(obj) File "D:\python3.9\lib\json\encoder.py", line 199, in encode chunks = self.iterencode(o, _one_shot=True) File "D:\python3.9\lib\json\encoder.py", line 257, in iterencode return _iterencode(o, 0) File "D:\python3.9\lib\json\encoder.py", line 179, in default raise TypeError(f'Object of type {o.__class__.__name__} ' TypeError: Object of type QuerySet is not JSON serializable

解决思路:?

(1)其中,最主要的错误是最后一句,现在的问题是:json?不能将QuertSet序列化。

TypeError: Object of type QuerySet is not JSON serializable

我输出了一下model.object.filter()和model.object.all()返回的结果确实是QuerySet对象:

?(2)是因为我的函数里写的Effect.object.get()这个返回的是字典类型的,就可以被json包序列化?

但是model.object.filter()和model.object.all()不行,报错了,因为它们返回的是一个QuerySet对象。而QuerySet对象不能被json序列化。

?(3)那么,我们导入下面这个包serializes试试,

from django.core import serializers

data = serializers.serialize("json", SomeModel.objects.all())

data1 = serializers.serialize("json", SomeModel.objects.filter(myfield1=myvalue))

?(4)改好之后,再次重启django项目之后,发现这个报错问题消失了,好了,问题成功解决。

?而且PyCarm也没有报错了:

??OK,问题解决。


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #django之 #TypeError #Object #of #type #queryset #is #not