Django ModelViewSet is a straight forward way for CRUD with a Single serialiser, but there can be instances where you need to use different serialisers for create function or any other.
You have two options.
- Define a function to override functions of
ModelViewSetand use different serialiser inside the function. - Use
get_serializer_classto provide different serialiser depending on the request method.
Overriding function
In here create overrides the default object class of ModelViewSet and rest Is defined in the function.
class YourModelViewSet(viewsets.ModelViewSet):
queryset = YourModel.objects.filter()
serializer_class = YourModelSerializer
permission_classes = (permissions.IsAuthenticated)
def create(self):
serializer = YourModelSerializer_2(data=request.data)
yourdata = serialiser.save()
get_serializer_class
If you don’t want to mess up the pre-packed functions of DRF but want each request to use a different serialiser this is the way to go.
class YourModelViewSet(viewsets.ModelViewSet):
queryset = YourModel.objects.filter()
serializer_class = YourModelSerializer
permission_classes = (permissions.IsAuthenticated)
def get_serializer_class(self):
if self.action == 'list':
return YourModelSerializer_2
return YourModelSerializer