You need to enable JavaScript to run this app. Django Rest Framework中ReadOnlyModelViewSet reverse URL解析失效问题
优惠活动
大模型
产品
解决方案
定价
更多

Django Rest Framework中ReadOnlyModelViewSet reverse URL解析失效问题

问题排查与解决

核心原因

DRF路由默认生成的视图名称和你预期的不一致:

  • DRF的SimpleRouter/DefaultRouter生成的路由名称规则为 {basename}-list/{basename}-detail,其中basename参数默认取视图集queryset对应模型的小写名称,你当前视图集绑定的是Book模型,未指定basename时默认生成的路由名称为book-list,而不是你以为的myads-list
  • router.register的第一个参数'myads'是URL路径的前缀,不是路由名称的前缀,你混淆了路径前缀和路由命名的规则

解决方法

修改路由注册代码,主动指定basename参数即可:

router.register('myads', views.GetMyAdsViewSet, basename='myads')

修改后路由生成的列表页路由名称就是myads-list,和你reverse("book:myads-list")的写法匹配,即可正常解析。

额外验证方式

如果遇到类似路由名称不匹配的问题,可以执行python manage.py show_urls(需要提前安装django-extensions依赖)查看项目所有路由的完整名称和对应路径,快速定位不匹配的问题。

小优化提示:你当前get_queryset中的过滤逻辑可以简化为queryset.filter(user=self.request.user),外键字段直接传用户对象即可,不需要额外取id。

内容的提问来源于stack exchange,提问作者Shubham Gupta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 01:36:04