2014-11-07 94 views
2

我使用的是DRF 2.4.4,並且遇到此問題,其中@list_route裝飾器需要pk。這裏是我的代碼摘錄:Django Rest Framework @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

回答

4

原來這是DRF extensions的擴展路由器的問題。

+0

接受你的答案,如果它解決。您可能還想描述這個問題。 – argaen 2014-11-07 08:24:07

+0

感謝upvote @djangozone。我現在不能接受我的回答,它告訴我要等到明天。我的問題是,我希望能夠訪問我的列表端點在/ api/runs/active,但它不適用於ExtendedDefaultRouter。我不確定從閱讀我鏈接的故障單後它有什麼問題,但看起來他們仍然在使用已棄用的「@action」裝飾器,並且沒有計劃很快支持「@ linked_route」。 – ybendana 2014-11-07 17:49:46

+0

嗨@ybendana,我遇到了同樣的問題。你能找到一個workaroud嗎? – 2015-01-29 07:03:59

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()