簡體   English   中英

Django Rest Framework在Viewset中的嵌套視圖

[英]Django Rest Framework Nested View in Viewset

class GameInviteViewSet():
    queryset = Game.objects.all()
    serializer_class = GameSerializer

    @action(
        methods=['get'],
        detail=True,
    )
    def invite(self, request, **id):
        # Invite user here with endpoint /api/games/{id}/invite/{user}

我如何制作上述端點? 我可以制作/api/games/{id}/invite/ ,但是之后如何添加另一個參數。

或者,根據文檔,默認情況下

{prefix}/{lookup}/{url_path}/   

我想要

{prefix}/{lookup}/{url_path}/{prefix2}/{lookup2}/{url_path2}/   

要么

{prefix}/{lookup}/{url_path}/{lookup2}/{url_path2}/

這樣我就可以做

games/{id}/{invite}/{user}/
games/{id}/{kick}/{user}/
games/{id}/{players}/{user}/gamestats/

要注冊我的路由器,請執行以下操作:

games/urls.py

router = routers.DefaultRouter()
router.register(r'^api/games', GameViewSet, 'games')

api/urls.py :從games.urls中將路由器導入為游戲

router = routers.SimpleRouter()
urlpatterns += games.urls

如下定義invite()

class GameInviteViewSet():
    queryset = Game.objects.all()
    serializer_class = GameSerializer

    @action(methods=['get'], detail=True)
    def invite(self, request, id, user, *args, **kwargs):
        ......
        ......
        ......

並在您的games/urls.py

# games/urls.py
router = routers.DefaultRouter()
router.register(r'^api/games', GameViewSet, 'games')
urlpatterns = [
    url(r'api/games/(?P<id>\d+)/invite/(?P<user>\d+)$'),

]

端點示例: /api/games/123/invite/765/

DRF嵌套路由器是一個模塊,可用於在Django Rest框架中定義嵌套資源。

它擁有700多個GitHub星,並在官方文檔中提到

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM