import wagtail.api.v2.serializers as wagtail_serializers from rest_framework.fields import SerializerMethodField from vbv_lernwelt.learnpath.utils import get_wagtail_type def get_it_serializer_class(model, field_names): return wagtail_serializers.get_serializer_class(model, field_names=field_names, meta_fields=[], base=ItBaseSerializer) class ItTypeField(wagtail_serializers.TypeField): def to_representation(self, obj): name = get_wagtail_type(obj) return name class ItBaseSerializer(wagtail_serializers.BaseSerializer): type = ItTypeField(read_only=True) children = SerializerMethodField() meta_fields = [] def get_children(self, obj): return [c.specific.get_serializer_class()(c.specific).data for c in obj.get_children()]