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
相关产品推荐
相关产品推荐

