["python","django","django-views","django-rest-framework"]
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 Update: In DRF 3.14.0, using one of the methods not implemented in the mixins gives a 405 - Method Not Allowed: Method Not Allowed: /status/ [06/Mar/2023 01:03:01] "POST /status/ HTTP/1.1" 405 41