没有PK的DRF详细路线

Ger*_*kai 5 django-rest-framework

I\xe2\x80\x99d 喜欢创建一个渲染当前用户数据的详细路由。

\n\n

如果我使用自定义路由器:

\n\n
class CustomRouter(routers.DefaultRouter):\n    def __init__(self, *args, **kwargs):\n        super(CustomRouter, self).__init__(*args, **kwargs)\n\n        self.routes.append(\n            routers.Route(url=r'^{prefix}/current{trailing_slash}',\n                          mapping={'get': 'current'},\n                          name='{basename}-current',\n                          initkwargs={'suffix': 'Detail'}))\n\n\nrest_router = CustomRouter()\nurlpatterns = [\n    url(r'^', include(rest_router.urls)),\n]\n
Run Code Online (Sandbox Code Playgroud)\n\n

它有效,我可以访问我的登录用户/api/users/current/

\n\n

但是,如果我使用 myCustomUser并注册 my 整体UserViewSet(来自viewsets.ReadOnlyModelViewSet):

\n\n
rest_router.register(r'users', viewsets.UserViewSet)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的current/路线停止工作。有没有办法添加这样一个不需要 pk 的自定义详细路由?

\n\n

编辑:我的第二种方法是添加一个@list_route实际上只返回一个对象而不是一个对象的对象。这根本不需要自定义路由器,只是我的一个额外方法UserViewSet

\n\n
class UserViewSet(viewsets.ReadOnlyModelViewSet):\n    \xe2\x80\xa6\n    @list_route(methods=['get'])\n    def current(self, request):\n        return Response(self.serializer_class(request.user).data)\n
Run Code Online (Sandbox Code Playgroud)\n\n

然而,由于显而易见的原因,这非常丑陋:为什么我会在列表路由中返回一个对象?

\n