# SerializerMethodField {{tag>Serializer Method Field django with recursive}} class MenuUserActionSerializer(serializers.ModelSerializer): brand = BrandSerializer(source="menu.brand") menu = MenuSerializer(read_only=True) menu_list = serializers.SerializerMethodField() @classmethod def get_menu_list(cls, obj): menu_qs = Menu.objects.raw( f""" WITh RECURSIVE menu_parent(id, parent_id, name, level, path, cycle) as ( SELECT id, parent_id, name, level, array[id], false FROM brand_menu WHERE id = {obj.menu.id} UNION ALL SELECT p.id, p.parent_id, p.name, p.level, array_append(c.path, p.id), p.id = any(c.path) FROM brand_menu p, menu_parent c WHERE p.id = c.parent_id AND not cycle ) SELECT * from menu_parent order by level """ ) menu_list_se = MenuSerializer(menu_qs, many=True) return menu_list_se.data class Meta: model = MenuUserAction fields = "__all__"