from typing import Union, Any from rest_framework import serializers from rest_framework.fields import SerializerMethodField from .models import Process, Source, SubProcess class SourceSerializer(serializers.ModelSerializer[Source]): icon = SerializerMethodField() class Meta: model = Source fields = ('id', 'title', 'icon', 'href', 'open_with_default_browser', 'is_frameless') def get_icon(self, obj: Source) -> Union[str, Any]: return obj.icon.url if obj.icon else None class SubProcessSerializer(serializers.ModelSerializer[Process]): sources = SourceSerializer(read_only=True, many=True) class Meta: model = Process fields = ('id', 'name', 'sources') class ProcessSerializer(serializers.ModelSerializer[Process]): sources = SourceSerializer(read_only=True, many=True) class Meta: model = Process fields = ('id', 'name', 'sources')