您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Django Rest Framework具有针对同一对象的多个视图集和路由器

Django Rest Framework具有针对同一对象的多个视图集和路由器

简短答案:您必须将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 routers
from tutorial.quickstart import views

router = 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]+)/?$>]
Go 2022/1/1 18:27:23 有495人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶