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

Django DRF路由异常:categories指向categoriesv2问题求助

问题原因与解决方案

这个问题的核心是Django REST Framework(DRF)的路由注册机制中,basename重复导致了路由覆盖。

为什么会出现这个情况?

当你用router.register()注册ViewSet时,如果没手动指定basename,DRF会自动根据ViewSet的queryset属性(或者model属性,若没有queryset的话)生成默认的basename。

如果你的CategoryViewSet和CategoryViewSetV2操作的是同一个模型(比如都是Category模型),那它们的默认basename都会是category。而路由注册是按顺序执行的,后面注册的categoriesv2路由会覆盖前面categories路由对应的API根条目,最终就出现了两个键都指向同一个路径的问题。

怎么解决?

解决方法很简单,注册路由时**手动给每个ViewSet指定唯一的basename**即可:

router.register(r'categories', views.CategoryViewSet, basename='category')
router.register(r'categoriesv2', views.CategoryViewSetV2, basename='categoryv2')

这样DRF就能区分两个ViewSet对应的API根条目,生成正确的路径映射:

"categories": "http://10.0.5.119:8000/api/categories/",
"categoriesv2": "http://10.0.5.119:8000/api/categoriesv2/",

额外说明

basename的作用是为ViewSet生成的URL名称提供前缀(比如category-list、category-detail),确保不同ViewSet的URL名称不会冲突,同时也直接影响API根中的条目映射。只要保证每个注册的ViewSet的basename唯一,就不会再出现这种覆盖问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:27:32