news 2026/9/29 2:16:31

解决 Django 非 ORM 模型初始化 request 提示问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
解决 Django 非 ORM 模型初始化 request 提示问题

在 Django REST Framework (DRF) 中,自定义序列化器字段时,出现TypeError: Field.__init__() got an unexpected keyword argument 'request'。该错误通常发生在get_serializer方法错误地处理了参数,导致request作为不合法的关键字参数传递给序列化器。

解决方案1

为了避免该错误,需要检查get_serializer方法的实现,确保request参数不会被直接传递,而是正确放入context中。get_serializer方法的正确实现方式如下:

# dvadmin/utils/viewset.pyclassCustomModelViewSet(viewsets.ModelViewSet):defget_serializer(self,*args,**kwargs):# 确保 request 仅作为 context 传递serializer_class=self.get_serializer_class()kwargs['context']=self.get_serializer_context()# 确保 context 正确设置returnserializer_class(*args,**kwargs)

在get_serializer_context方法中,默认情况下request应该包含在返回的context中,但如果有自定义修改,应该确保context仍然正确地返回request。

# dvadmin/utils/viewset.pyclassCustomModelViewSet(viewsets.ModelViewSet):defget_serializer_context(self):# 返回包含请求和其他上下文信息的字典context=super().get_serializer_context()returncontext

此外在视图集中调用get_serializer方法时,也需要确保不会错误地传递request参数。例如,在list方法中,正确的调用方式如下:

# dvadmin/utils/viewset.pyclassCustomModelViewSet(viewsets.ModelViewSet):deflist(self,request,*args,**kwargs):queryset=self.filter_queryset(self.get_queryset())page=self.paginate_queryset(queryset)ifpageisnotNone:serializer=self.get_serializer(page,many=True)# 仅传递查询数据returnself.get_paginated_response(serializer.data)serializer=self.get_serializer(queryset,many=True)returnResponse(serializer.data)

解决方案2

如果不能修改CustomModelViewSet的get_serializer方法,可以在具体视图集中重写get_serializer方法,确保在调用父类get_serializer方法时移除request参数。这样可以局部修复该问题,而不会影响其他视图集。

fromrest_framework.responseimportResponsefrom.modelsimportExaminationAnalyzeBasicDescriptionfrom.serializersimportExaminationAnalyzeBasicDescriptionSerializerfromdvadmin.utils.viewsetimportCustomModelViewSetclassExaminationAnalyzeBasicDescriptionViewSet(CustomModelViewSet):""" 考试成绩基本信息 """queryset=ExaminationAnalyzeBasicDescription.objects.filter(is_deleted=0)serializer_class=ExaminationAnalyzeBasicDescriptionSerializerdefget_serializer(self,*args,**kwargs):# 安全移除 request 参数,避免传递给 DRF 序列化器kwargs.pop('request',None)returnsuper().get_serializer(*args,**kwargs)

执行 API 端点后,错误TypeError: Field.__init__() got an unexpected keyword argument 'request'不再发生,序列化器能够正确解析数据,并返回期望的 JSON 结果。

该错误的根本原因是request作为不合法参数被传递给序列化器。正确的做法是在context中传递request,或在get_serializer方法中安全地移除不必要的参数。通过修正get_serializer或在具体视图集中重写get_serializer,可以有效避免该错误,并确保 DRF 序列化器的正常工作。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/29 2:15:54

Windows 11安装VC++6.0 SP6全流程:老工程编译与HTTP接口访问指南

简介:VC 6.0 with SP6(含中英文版、MSDN)是一份面向Windows平台C开发者和编程学习者的经典集成开发环境资源包,尤其适合需要维护老旧MFC项目、学习传统Win32编程或体验早期Visual Studio工具的读者。压缩包整体约475.88MB&#xf…

作者头像 李华
网站建设 2026/9/29 2:15:48

计算机视觉数据标注与数据增强基础

图像水平翻转后,汽车到了右侧,标注框却仍留在左侧。图像与标签相互矛盾,训练便会受影响。读完本文,你可以检查标注坐标、验证增强是否同步修改标签,并识别训练集与验证集的近重复泄漏。 本文从宽 100 像素的示意图入手,演示矩形框翻转的坐标变换,并解释划分和标注口径为…

作者头像 李华
网站建设 2026/9/29 2:15:47

【GitHub项目实战】ShareGPT4Video-Gradio 识别视频内容并生成文本描述

ShareGPT4Video旨在让视频制作变得简单高效,让每个人都能释放创意、分享故事。通过不断优化AI技术和用户体验,项目团队希望将ShareGPT4Video打造为视频内容创作的首选工具,推动视频创作的民主化进程。ShareGPT4Video以其创新的技术和用户友好的设计,正在改变我们创作和分享…

作者头像 李华
网站建设 2026/9/29 2:15:45

【GitHub项目实战】EasyWav2Lip 实现音频驱动的数字人口型同步

音视频同步技术的发展让数字人和AI生成视频更贴近真实,尤其在唇形对齐方面,Wav2Lip 项目被广泛应用。配合人脸修复与视频增强模型,该类系统能够让静态视频与任意音频实现自然的对口型合成,具有广泛的实际用途,包括虚拟主持、配音自动化及教育演示等场景。 围绕 EasyWav2L…

作者头像 李华
网站建设 2026/9/29 2:15:18

TensorBoard HParams 插件 HTTP API 全解析:协议、端点与数据模型

数据可视化机器学习前端后端 【免费下载链接】tensorboard TensorFlows Visualization Toolkit 项目地址: https://gitcode.com/gh_mirrors/te/tensorboard 点击查看 免费下载 本篇技术指南围绕 TensorBoard HParams(超参数调优)插件的 HTTP…

作者头像 李华