Back to writing

Article

Customizing the Retrieve Method in a ViewSet

Override a ViewSet’s retrieve() method when a detail response needs related data beyond the default serializer output. Fetch the object with get_object(), serialize it, serialize the related children with many=True, and add them to a copied response dictionary.

    def retrieve(self, request, *args, **kwargs):        instance = self.get_object()        serializer = self.get_serializer(instance)        data = serializer.data        children = instance.children.all()        children_serializer = self.get_serializer(children, many=True)        data['children'] = children_serializer.data        return Response(data)