Thanks to @bbengfort, I've provided a simple solution without the need to create a new ViewSet
.
Different Serializer Per Action In the ViewSet in Django
TL;DR
In the following code, we are overriding get_serializer_class
based on Django documentation and we're specifying different serializers per action if it's needed:
Views.py
class TestAPIView(viewsets.ModelViewSet):
permission_classes = (IsAuthenticated,)
serializer_class = TestAPISerializer
serializer_class_by_action = {
'update_me': UpdateMeSerializer,
}
def get_serializer_class(self):
if hasattr(self, 'serializer_class_by_action'):
return self.serializer_class_by_action.get(self.action, self.serializer_class)
return self.serializer_class
@action(detail=True, methods=['patch'], url_name='Update Me', url_path='updateme')
def update_me(self, request, pk=None):
# Write your own logic
return Response("OK")
Serializers.py
class UpdateMeSerializer(serializers.Serializer):
count = serializers.CharField(required=False, allow_null=True, default=10)
class Meta:
fields = ['count']