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

Django ViewSet搭配Default Router时retrieve方法调用报错求助

Django ViewSet 单条查询报错修复方案

核心错误原因

调用CommentSerializer序列化单条数据时参数错误:你已经通过get_object_or_404拿到了对应主键的单条评论实例,却仍传入全量查询集,还额外传递了序列化器不支持的pk参数,直接触发参数不匹配报错。

修复后的retrieve方法代码

def retrieve(self, request, pk=None):
    queryset = Comment.objects.all()
    # 获取到的单条实例直接赋值给变量
    comment = get_object_or_404(queryset, pk=pk)
    # 序列化器第一个参数传入单条实例,不需要额外传pk参数
    result = CommentSerializer(comment)
    return Response(result.data)

其他需要修正的潜在问题

  • 序列化器字段定义拼写错误:comment = serializer.CharField() 应改为 comment = serializers.CharField()(末尾缺s)
  • 方法缩进错误:get_queryset、create、update属于ViewSet的方法,你错误将其写在了序列化器的Meta类内部,需要移到CommentViewSet类下,序列化器Meta类仅保留model、fields配置即可
  • 路由注册的视图类名与实际定义不一致:urls.py中注册的是CommentsViewSet,实际定义的ViewSet类名是CommentViewSet,命名不统一会触发路由匹配错误
  • 冗余字段定义:你使用的是ModelSerializer,不需要手动重复定义和模型字段完全一致的id、created_at、updated_at属性,框架会自动完成映射

内容的提问来源于stack exchange,提问作者Phil Cho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 05:30:03