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
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.