Вложенный вид Django Rest Framework во Viewset - PullRequest
0 голосов
/ 31 августа 2018
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

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

Вложенные маршрутизаторы DRF - это модуль, который позволяет определять вложенные ресурсы в Django Rest Framework.

Имеет более 700 звезд GitHub и упоминается в официальной документации

0 голосов
/ 31 августа 2018

Определите invite(), как показано ниже,

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

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

и в вашем 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/

...