Django Rest Framework @list_route需要pk

时间:2014-11-07 02:19:45

标签: django-rest-framework

我正在使用DRF 2.4.4并遇到@list_route装饰器需要pk的问题。这是我的代码摘录:

class RunViewSet(ModelViewSet):
    serializer_class = RunSerializer
    queryset = Run.objects.all()

    @list_route()
    def active(self, request, pk):
        '''Return active runs.'''
        qs = Run.objects.all(deleted=False)
        serializer = RunSerializer(qs, many=True)
        return Response(serializer.data)

如果我尝试在/api/runs/active访问端点,我会收到404 error。仅当我提供pk /api/runs/1/active时,它才有效。由于@list_route应该对集合进行操作,为什么我需要给它pk

2 个答案:

答案 0 :(得分:4)

这对于DRF extensions的扩展路由器来说是一个问题。

答案 1 :(得分:4)

如果还有人遇到此问题,您可以使用建议的解决方案here

  

如果你想使用筑巢设施,你应该混合   NestedRouterMixin进入你的路由器。

我做了什么:

from rest_framework.routers import DefaultRouter
from rest_framework_extensions.routers import NestedRouterMixin


class NestedDefaultRouter(NestedRouterMixin, DefaultRouter):
    pass

# Then you can use your router as usual
router = NestedDefaultRouter()