Дополнительные представления к Django Rest Framework ViewSet - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть простой DRF ViewSet для модели, расположенный по адресу /gen_req/

class GenerationRequestViewSet(viewsets.ModelViewSet):
    queryset = GenerationRequest.objects
    serializer_class = GenerationRequestSerializer

По умолчанию используется метод POST / GET / и т.д.обработчики.Тем не менее, я хочу добавить еще один для GET, а также для различных шаблонов URL (/gen_req/created_list:

class GenerationRequestViewSet(viewsets.ModelViewSet):
    queryset = GenerationRequest.objects
    serializer_class = GenerationRequestSerializer

    @action(methods=['get'])
    def special_get_handler(self, request):
        queryset = GenerationRequest.filter(...) # Some extra filtering here
        serializer = self.get_serializer(queryset, many=True)
        return Response(serializer.data)

. Есть ли способ создать такое представление в ViewSet, или следует создать другой APIView?

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Вы можете сделать это, просто добавьте такую ​​запись в ваш файл urls.py.

path('/gen_req/created_list',
     GenerationRequestViewSet.as_view({'get': 'special_get_handler'}),),
0 голосов
/ 21 декабря 2018

Вы можете сделать это, но вам нужно соответствующим образом назвать свой метод.Так что с кодом, который вы опубликовали, вы сможете получить этот метод, запросив /gen_req/special_get_handler.

Конечно, он должен быть зарегистрирован в url.py.Что-то вроде:

api_router = DefaultRouter()
api_router.register("gen_req", GenerationRequestViewSet)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...