[Django]-How to customize the response of Django REST Framework GET request?

5👍

You can rewrite retrieve method in your view in order to update your serializer response data

class FooRetrieveAPIView(RetrieveAPIView):
    queryset = Foo.objects.all()
    serializer_class = FooSerializer

    def retrieve(self, request, *args, **kwargs):
        instance = self.get_object()
        serializer = self.get_serializer(instance)
        data = serializer.data
        # here you can manipulate your data response
        return Response(data)

2👍

I had a similar problem and didn’t want to create a custom exception handler as I wanted more control over defining error messages for api calls.
After a bit of hand banging I used the following code in viewset to get custom error message while updating the record using partial_update.

 def partial_update(self, request, *args, **kwargs):
    partial = kwargs.pop('partial', False)
    try:
        instance = self.get_object()
        serializer = self.get_serializer(instance, data=request.data, partial=partial)
        serializer.is_valid(raise_exception=True)
        self.perform_update(serializer)
        headers = self.get_success_headers(serializer.data)
        response = {"status": "True", "message": "", "data": serializer.data}
        return Response(response, status=status.HTTP_201_CREATED, headers=headers)
    except exception.Http404:
        headers = ""
        response = {"status": "False", "message": "Details not found", "data": ""}
        return Response(response, status=status.HTTP_200_OK, headers=headers)

Leave a comment