Как использовать параметр пути в GenericViewSet, Mixin CBS?

Я новичок в DRF, Django.

Я хочу сделать get API с параметром path, имя которого - точка. (например, localhost:8000/api/ranks/{period})

# views.py

class RankingView(mixins.ListModelMixin,
                  GenericViewSet):

    queryset = Record.objects.all()
    serializer_class = RecordSerializer

    @action(methods=['GET'], detail=False, url_path='<str:period>', url_name='<str: period>')
    def get_rank(self, request, period):
        #logic
        return 
# urls.py

router.register(r'api/ranks', RankingView)

urlpatterns = [
    path('', include(router.urls)),
]

но он не работает. это может быть легко решить, но я не смог найти ответ, спасибо за помощь.

попробуйте добавить определенный путь, например, так:

urlpatterns = [
path('', include(router.urls)),
path('api/ranks/<str:period>', views.RankingView.as_view({
'get': 'get_rank'
})),
]

Я решил эту проблему с помощью регулярного выражения python.

class RankingView(mixins.ListModelMixin, GenericViewSet):

queryset = Record.objects.all()
serializer_class = RecordSerializer

@action(methods=['GET'], detail=False, url_path='(?P<period>\w+)')
def get_rank(self, request, period):
    #logic
    return 

Это упрощает управление урлами, а также позволяет легко использовать параметр path с микшинами, viewSet.

Вернуться на верх