我想创建一个呈现当前用户数据的详细路线。
如果我使用自定义路由器:
class CustomRouter(routers.DefaultRouter):
def __init__(self, *args, **kwargs):
super(CustomRouter, self).__init__(*args, **kwargs)
self.routes.append(
routers.Route(url=r'^{prefix}/current{trailing_slash}',
mapping={'get': 'current'},
name='{basename}-current',
initkwargs={'suffix': 'Detail'}))
rest_router = CustomRouter()
urlpatterns = [
url(r'^', include(rest_router.urls)),
]
可行,我可以通过/api/users/current/
访问我的登录用户。
但是,如果我使用CustomUser
并注册我的整个UserViewSet
(来自viewsets.ReadOnlyModelViewSet
):
rest_router.register(r'users', viewsets.UserViewSet)
我的current/
路线停止工作。有没有办法可以添加这样一个不需要pk的自定义细节路径?
编辑:我的第二种方法是添加一个实际只返回一个对象而不是一个对象的@list_route
。这根本不需要自定义路由器,只是我UserViewSet
上的一个额外方法:
class UserViewSet(viewsets.ReadOnlyModelViewSet):
…
@list_route(methods=['get'])
def current(self, request):
return Response(self.serializer_class(request.user).data)
然而,由于显而易见的原因,这是非常难看的:为什么我会在列表路径中返回一个对象?