You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DRF使用无模型Serializer时DemoView报queryset缺失解决方法

报错原因
  • 你使用的viewsets.ModelViewSet是DRF专为对接数据库模型的增删改查场景设计的基类,内部强制要求配置queryset属性或重写get_queryset()方法获取模型数据源,你的场景不需要绑定数据模型,选择这个基类本身就不匹配。
  • 代码存在两个隐藏问题:
    • 序列化器文件名为serializer.py,但视图层导入语句写的是from .serializers import DemoSerializer,文件名和导入路径不一致会触发导入错误。
    • 视图中定义的get()方法不符合视图集的方法命名规则,用DefaultRouter注册视图集时,/demo/路径的GET请求会自动映射到list()方法,你写的get()方法根本不会被路由匹配到。
解决步骤
  1. 先修正文件名问题:将myproject/myapp/serializer.py重命名为serializers.py,和视图中的导入路径保持一致。
  2. 替换视图基类,修改视图层myproject/myapp/views.py代码如下:
from rest_framework import viewsets
from rest_framework.response import Response
from .serializers import DemoSerializer

class DemoView(viewsets.ViewSet):
    def list(self, request):
        # 此处可传入任意不需要绑定模型的自定义数据
        my_data = [{"name": "Harsha"}, {"name": "Harsha"}]
        results = DemoSerializer(my_data, many=True).data
        return Response(results)
  1. 路由层代码无需修改,重启服务后访问http://localhost:8000/demo/即可正常返回序列化结果。

不推荐的替代方案:如果硬要沿用ModelViewSet,可以通过给类添加空queryset属性、重写list方法绕过初始报错,但ModelViewSet自带的创建、详情查询、更新、删除方法全是针对数据库模型操作设计的,你不需要绑定模型的话这些冗余方法完全没用,还可能触发额外的逻辑错误,没有必要这么写。

内容的提问来源于stack exchange,提问作者Harsha Biyani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 21:09:21