没有PK的DRF细节路线

时间:2016-08-30 12:35:17

标签: django-rest-framework

我想创建一个呈现当前用户数据的详细路线。

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

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)

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

0 个答案:

没有答案