简短答案:您必须将
basename参数添加到以下路线
users-minimal:
router = routers.DefaultRouter()router.register(r'users', UserViewSet)router.register(r'users-minimal', UserMinimalViewSet, basename='usersminimal')
通常,DRF会
basename从您的计算机中自动生成一个
queryset。在DRF路由器文档中搜索对此进行了说明
basename。
您的两个
Viewset使用相同
queryset的字母,因此最初相同
basename。这就导致了您所看到的问题,后一个注册的
ViewSet将覆盖前一个注册的路由
ViewSet。当您更改
router.register示例中的顺序时,可以看到这一点。
在外壳中直接测试代码时,可以看到路由的基本名称:
from rest_framework import routersfrom tutorial.quickstart import viewsrouter = routers.DefaultRouter()router.register(r'users', views.UserViewSet)router.register(r'users-minimal', views.UserMinimalViewSet)> routers.urls[<RegexURLPattern user-list ^minimal/$>,<RegexURLPattern user-list ^minimal.(?P<format>[a-z0-9]+)/?$>,<RegexURLPattern user-detail ^minimal/(?P<pk>[^/.]+)/$>,<RegexURLPattern user-detail ^minimal/(?P<pk>[^/.]+).(?P<format>[a-z0-9]+)/?$>,<RegexURLPattern user-list ^users/$>,<RegexURLPattern user-list ^users.(?P<format>[a-z0-9]+)/?$>,<RegexURLPattern user-detail ^users/(?P<pk>[^/.]+)/$>,<RegexURLPattern user-detail ^users/(?P<pk>[^/.]+).(?P<format>[a-z0-9]+)/?$>,<RegexURLPattern api-root ^$>,<RegexURLPattern api-root ^.(?P<format>[a-z0-9]+)/?$>]



