from django.core import serializers from django.db.models.query import CollectedObjects from django.http import HttpResponse def export_related_as_json(modeladmin, request, qs): """Serializes the selected queryset and all related objects to JSON""" response = HttpResponse(mimetype="text/javascript") # Gather the related objects for each instance in the queryset. collected_objs = CollectedObjects() for obj in qs: obj._collect_sub_objects(collected_objs) # Collect all the instances into a list suitable for serialization. objs = [] for _, objs_dict in collected_objs.items(): # co doesn't implement values objs += objs_dict.values() serializers.serialize("json", objs, stream=response, indent=4) return response