Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django rest framework 无PK的DRF详细路线_Django Rest Framework - Fatal编程技术网

Django rest framework 无PK的DRF详细路线

Django rest framework 无PK的DRF详细路线,django-rest-framework,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}/c

我想创建一个细节路由来呈现当前用户的数据

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

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/
访问我的登录用户

但是,如果我使用my
CustomUser
并注册整个my
UserViewSet
(它从
ViewSet.ReadOnlyModelViewSet
派生而来):

我的
当前/
路线停止工作。有没有一种方法可以添加这样一个不需要pk的定制细节路线

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

rest_router.register(r'users', viewsets.UserViewSet)
class UserViewSet(viewsets.ReadOnlyModelViewSet):
    …
    @list_route(methods=['get'])
    def current(self, request):
        return Response(self.serializer_class(request.user).data)

然而,这很难看,原因很明显:为什么我要在列表路由中返回一个对象?

根据定义,任何没有PK的路由都会成为列表路由。如果你从DefaultRouter的详细路由中删除“pk”部分,它将与列表路由相同。我知道这一点。问题是,我实际上需要一个详细的路由,但是有一个固定的PK(登录用户的ID)。但是如果我创建了一个
@detail\u route
,我必须将其称为
api/users/current/1
,其中1可以是任何数字。但是您可以有多个用户,对吗?因此,pk实际上会有所不同。提供的pk是否真正对应于登录用户取决于您的权限类别。是的,但从请求的角度来看,它是固定的。因此,我不想把它放在URL中。