Django Rest Framework ViewSet的其他视图

时间:2018-12-21 09:53:12

标签: python django django-rest-framework

我有一个简单的DRF ViewSet模型,位于/gen_req/

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

它具有默认的POST / GET / etc。处理程序。但是,我想为不同的网址格式(/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 :(得分:1)

您可以这样做,但是您需要相应地命名方法。因此,使用代码,您已经发布了,您可以通过请求/gen_req/special_get_handler来获得此方法。

当然,它应该在url.py中注册。像这样:

api_router = DefaultRouter()
api_router.register("gen_req", GenerationRequestViewSet)

答案 1 :(得分:1)

您可以做到,只需将此类记录添加到您的urls.py文件中即可。

path('/gen_req/created_list',
     GenerationRequestViewSet.as_view({'get': 'special_get_handler'}),),