python - Django TypeError:用户类型的对象不是 JSON 可序列化的
问题描述
所以我试图在 django 中进行 ajax 调用,但这发生了
Internal Server Error: /ajax/new_notification/
Traceback (most recent call last):
File "C:\Users\berna\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Users\berna\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\berna\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\berna\Desktop\Python & Javascript\Web development\MiFamiliaEsUnDesastre\mifamiliaesundesastre\chat\views.py", line 71, in new_notification
return JsonResponse(user, safe=False)
File "C:\Users\berna\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\http\response.py", line 561, in __init__
data = json.dumps(data, cls=encoder, **json_dumps_params)
File "C:\Users\berna\AppData\Local\Programs\Python\Python38-32\lib\json\__init__.py", line 234, in dumps
return cls(
File "C:\Users\berna\AppData\Local\Programs\Python\Python38-32\lib\json\encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "C:\Users\berna\AppData\Local\Programs\Python\Python38-32\lib\json\encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "C:\Users\berna\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\serializers\json.py", line 104, in default
return super().default(o)
File "C:\Users\berna\AppData\Local\Programs\Python\Python38-32\lib\json\encoder.py", line 179, in default
raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type User is not JSON serializable
HTTP GET /ajax/new_notification/ 500 [0.15, 127.0.0.1:64660]
引发此错误的代码在这里,我也是 django 的新手,所以也许解决方案很明显
def new_notification(request):
user = request.user
user.profile.notifications = user.profile.notifications + 1
user.save()
return JsonResponse(user, safe=False)
感谢您的帮助
解决方案
好吧,这个错误是不言自明的:
TypeError: Object of type User is not JSON serializable
不幸的是,请求对象中的用户(不一定是“用户”模型,如果我在这里错了,请纠正我)默认情况下不是 JSON 可序列化的。最简单的解决方案是仅映射必要的字段:
return JsonResponse({ "notifications": profile.notifications }, safe=True)
但这太天真了。相反,也许 django 序列化程序可以完成这项工作:
from django.core import serializers
def new_notification(request):
user = request.user
user.profile.notifications = user.profile.notifications + 1
user.save()
return JsonResponse(serializers.serialize('json', user), safe=False)
推荐阅读
- css - 使用 rvest 在 R 中进行 Web 抓取:问题查找标签
- azure - 使用 Azure DevOps 部署 ShinyProxy 和应用程序
- mongodb - MongoDB 聚合查找不适用于 localfield _id
- django - 删除外键模型?
- r - 保存 .dta:使用 R 的带有很长字符串的数据框
- c# - 无法使用反射将方法组转换为非委托类型
- r - 在 split-apply-combine 中使用 map() 来运行具有回归权重的多个回归
- r - 在 ggplot2 log10 轴上以十的整数幂中断
- linux - 在linux(Jenkins)中的字符串匹配正则表达式之前添加新行
- python - 如何在自定义 DeleteView 中重定向到上一页?