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)