概述
在启动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:envfirstlibsite-packagesdjangocorehandlersexception.py", line 34, in inner
response = get_response(request)
File "D:envfirstlibsite-packagesdjangocorehandlersbase.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "D:envfirstlibsite-packagesdjangocorehandlersbase.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "D:envfirstlibsite-packagesdjangoviewsdecoratorscsrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "D:太原理工2018代码baizhityut2018PythonWebzxDjangoProject01homeviews.py", line 52, in home_ajax
"configurationlist":json.dumps(configuration_list),
File "D:python3.9libjson__init__.py", line 231, in dumps
return _default_encoder.encode(obj)
File "D:python3.9libjsonencoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "D:python3.9libjsonencoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "D:python3.9libjsonencoder.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,问题解决。
最后
以上就是清爽路灯为你收集整理的django之 TypeError: Object of type QuerySet is not JSON serializable,json 不能将QuertSet序列化的全部内容,希望文章能够帮你解决django之 TypeError: Object of type QuerySet is not JSON serializable,json 不能将QuertSet序列化所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复