Как использовать параметр пути в 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.