Disable a method in a ViewSet, django-rest-framework

ViewSets have automatic methods to list, retrieve, create, update, delete, ...

I would like to disable some of those, and the solution I came up with is probably not a good one, since OPTIONS still states those as allowed.

Any idea on how to do this the right way?

    class SampleViewSet(viewsets.ModelViewSet):
        queryset = api_models.Sample.objects.all()
        serializer_class = api_serializers.SampleSerializer

        def list(self, request):
            return Response(status=status.HTTP_405_METHOD_NOT_ALLOWED)
        def create(self, request):
            return Response(status=status.HTTP_405_METHOD_NOT_ALLOWED)

The definition of ModelViewSet is:

    class ModelViewSet(mixins.CreateModelMixin, 
                       mixins.RetrieveModelMixin, 
                       mixins.UpdateModelMixin,
                       mixins.DestroyModelMixin,
                       mixins.ListModelMixin,
                       GenericViewSet)

So rather than extending ModelViewSet, why not just use whatever you need? So for example:

    from rest_framework import viewsets, mixins

    class SampleViewSet(mixins.RetrieveModelMixin,
                        mixins.UpdateModelMixin,
                        mixins.DestroyModelMixin,
                        viewsets.GenericViewSet):
        ...

With this approach, the router should only generate routes for the included methods.

Reference :

ModelViewSet

From: stackoverflow.com/q/23639113