新闻详情

新闻详情

首页 / 资讯中心 / 详情

Django 项目无法调用 swagger.json 接口数据的问题

发布时间:2026/9/29 9:16:49来源:尧图网络
Django 项目无法调用 swagger.json 接口数据的问题
在 Django REST Framework (DRF) 项目中Swagger (drf-yasg) 解析get_queryset()时如果get_queryset()返回list而不是QuerySet会导致AttributeError: list object has no attribute model错误。本文记录该问题的调试过程及最终解决方案。Traceback(most recent call last):FileG:\MyGitProject\venv\dv3admin\lib\site-packages\rest_framework\views.py,line506,indispatch responsehandler(request,*args,**kwargs)FileG:\MyGitProject\venv\dv3admin\lib\site-packages\drf_yasg\views.py,line96,inget schemagenerator.get_schema(request,self.public)FileG:\MyGitProject\MyTools\MyToolsBak\MyToolsBak-HostServer\dvadmin\utils\swagger.py,line39,inget_schema swaggersuper().get_schema(request,public)FileG:\MyGitProject\venv\dv3admin\lib\site-packages\drf_yasg\generators.py,line276,inget_schema paths,prefixself.get_paths(endpoints,components,request,public)FileG:\MyGitProject\venv\dv3admin\lib\site-packages\drf_yasg\generators.py,line482,inget_paths operationself.get_operation(view,path,prefix,method,components,request)FileG:\MyGitProject\venv\dv3admin\lib\site-packages\drf_yasg\generators.py,line524,inget_operation operationview_inspector.get_operation(operation_keys)FileG:\MyGitProject\venv\dv3admin\lib\site-packages\drf_yasg\inspectors\view.py,line33,inget_operation queryself.get_query_parameters()FileG:\MyGitProject\venv\dv3admin\lib\site-packages\drf_yasg\inspectors\view.py,line293,inget_query_parameters natural_parametersself.get_filter_parameters()self.get_pagination_parameters()FileG:\MyGitProject\venv\dv3admin\lib\site-packages\drf_yasg\inspectors\base.py,line409,inget_filter_parameters fieldsself.probe_inspectors(self.filter_inspectors,get_filter_parameters,filter_backend())or[]FileG:\MyGitProject\venv\dv3admin\lib\site-packages\drf_yasg\inspectors\base.py,line110,inprobe_inspectors resultmethod(obj,**kwargs)FileG:\MyGitProject\venv\dv3admin\lib\site-packages\drf_yasg\inspectors\query.py,line42,inget_filter_parametersreturnlist(map(self.param_to_schema,filter_backend.get_schema_operation_parameters(self.view)))FileG:\MyGitProject\venv\dv3admin\lib\site-packages\django_filters\rest_framework\backends.py,line146,inget_schema_operation_parameters filterset_classself.get_filterset_class(view,queryset)FileG:\MyGitProject\venv\dv3admin\lib\site-packages\django_filters\rest_framework\backends.py,line40,inget_filterset_class queryset.model,filterset_model AttributeError:listobjecthas no attributemodel该错误发生在drf-yasg解析 Swagger API 文档时表明某个ViewSet的get_queryset()方法返回了list而 Swagger 期望QuerySet。错误代码示例# ❌ 错误示例返回 listdefget_queryset(self):fixed_ids[11,12]fixed_recordsArticleTag.objects.filter(id__infixed_ids)remaining_recordsArticleTag.objects.exclude(id__infixed_ids)random_recordsremaining_records.order_by(?)[:5]querysetlist(fixed_records)list(random_records)# ❌ 把 QuerySet 变成了 listreturnqueryset# ❌ Swagger 解析失败比如我的代码里是这样的仔细看发布时发现问题了。defget_queryset(self):# 获取固定的记录fixed_ids[11,12]fixed_recordsArticleTag.objects.filter(id__infixed_ids)# 获取其余的记录remaining_recordsArticleTag.objects.exclude(id__infixed_ids)# 随机选择5个记录random_recordsremaining_records.order_by(?)[:5]# 合并固定记录和随机记录querysetlist(fixed_records)list(random_records)returnqueryset确保get_queryset()返回QuerySet使用union()合并多个QuerySet# ✅ 正确示例使用 union()defget_queryset(self):fixed_ids[11,12]fixed_recordsArticleTag.objects.filter(id__infixed_ids)remaining_recordsArticleTag.objects.exclude(id__infixed_ids)random_recordsremaining_records.order_by(?)[:5]querysetfixed_records.union(random_records)# ✅ 确保返回 QuerySetreturnqueryset✅union()组合两个QuerySet避免list类型错误。如何调试get_queryset()返回类型手动打印get_queryset()返回值类型# 在所有 ViewSet 里加入调试代码importlogging loggerlogging.getLogger(__name__)defget_queryset(self):querysetArticleTag.objects.all()logger.debug(f 调试:{self.__class__.__name__}.get_queryset() 返回{type(queryset)})returnqueryset执行 Swagger 请求 (http://127.0.0.1:8000/swagger.json) 后检查django.log里打印的queryset类型。在 Django Shell 里手动测试python manage.py shell然后执行fromapp.viewsimportExampleViewSet viewExampleViewSet()print(type(view.get_queryset()))# 如果输出 class list说明有问题如果get_queryset()返回list则需要修改代码确保它返回QuerySet。✅ 其他常见问题 解决方案问题错误代码解决方案get_queryset()直接返回了listreturn list(queryset)改成QuerySet如queryset.union(another_queryset).values()或.values_list(..., flatTrue)可能导致listqueryset.values(field)改成.values_list(field, flatTrue)解析 Swagger 时找不到出错的 APIswagger.py解析失败在swagger.py里logger.error(Swagger 解析失败: {e})Django Shell 运行view.get_queryset()发现返回listpython manage.py shell修复get_queryset()确保返回QuerySet总结如何防止AttributeError: list object has no attribute model错误1️⃣确保get_queryset()返回QuerySet而不是list2️⃣使用union()代替list list3️⃣检查.values()是否返回list改成.values_list(..., flatTrue)4️⃣用print(type(queryset))或 Django Shell 调试这样Swagger 解析不会再出错API 文档可以正常生成
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【零基础学智能仿真-32】热传导与热—力耦合:同样升温,为什么有时伸长、有时产生应力? 2026/9/29 10:19:20

【零基础学智能仿真-32】热传导与热—力耦合:同样升温,为什么有时伸长、有时产生应力?

课程摘要 本节用一根两端温度不同的金属杆,串起稳态热传导与热应力计算。我们先从傅里叶定律建立导热方程,用两个有限元单元求出温度场与热流;再将温度变化转为热应变,比较“一端自由”和“两端固定”时完全不同的力学结果。通过手算和可运行代码,学习者将理解温度、热流、…

阅读更多 →
PADS四层板实战:原理图、Layout、等长与Gerber输出避坑指南 2026/9/29 10:19:13

PADS四层板实战:原理图、Layout、等长与Gerber输出避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
生成式AI重构零售电商:五大场景落地指南 2026/9/29 10:19:13

生成式AI重构零售电商:五大场景落地指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
每日热评|Jev 聊天助手:把「对话副驾」装进手机聊天App 2026/9/29 10:19:13

每日热评|Jev 聊天助手:把「对话副驾」装进手机聊天App

每日热评|Jev 聊天助手:把「对话副驾」装进手机聊天App专栏:Valhalla‑Matrix|证据驱动开源静态工程尽调 GitHub热度:本周 Trending 第7 ⭐6106 仓库地址:https://github.com/jev-chat/jev-chat-jarvis 取证…

阅读更多 →
AI漫剧助手:面向漫剧短剧创作者的一站式提示词管理工具 2026/9/29 10:19:06

AI漫剧助手:面向漫剧短剧创作者的一站式提示词管理工具

当前AI漫剧、竖屏短剧赛道越来越火热,但很多创作者会耗费大量时间编写、调试提示词,反复处理人物崩脸、画面风格不统一、分镜设计繁琐等问题。AI漫剧助手,是专为漫剧创作者打造的提示词素材管理工具,集成全套漫剧创作资源&#xf…

阅读更多 →
2026年GEO优化平台选型指南:国内四大靠谱GEO优化公司合作攻略 2026/9/29 10:19:00

2026年GEO优化平台选型指南:国内四大靠谱GEO优化公司合作攻略

一、行业发展总览(一)GEO 优化与 GEO 优化平台核心定义GEO 全称为 Generative Engine Optimization,即生成式引擎优化,是伴随生成式 AI 发展兴起的数字营销范式。面向豆包、DeepSeek、通义千问、Kimi、ChatGPT、Gemini 等海内外生…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉