我正在使用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
?
答案 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()