from rest_framework import serializers from .models import Region class RegionSerializer(serializers.ModelSerializer): """Serializer for Region model.""" level_display = serializers.CharField(source='get_level_display', read_only=True) status_display = serializers.CharField(source='get_status_display', read_only=True) parent_name = serializers.CharField(source='parent.name', read_only=True, allow_null=True) children_count = serializers.SerializerMethodField() class Meta: model = Region fields = ('id', 'name', 'level', 'level_display', 'parent', 'parent_name', 'status', 'status_display', 'children_count', 'created_at', 'updated_at') read_only_fields = ('id', 'created_at', 'updated_at') def get_children_count(self, obj): return obj.children.count() class RegionDetailSerializer(serializers.ModelSerializer): """Detailed serializer for Region model.""" level_display = serializers.CharField(source='get_level_display', read_only=True) status_display = serializers.CharField(source='get_status_display', read_only=True) parent = RegionSerializer(read_only=True) children = RegionSerializer(many=True, read_only=True) full_path = serializers.SerializerMethodField() class Meta: model = Region fields = ('id', 'name', 'level', 'level_display', 'parent', 'children', 'status', 'status_display', 'full_path', 'created_at', 'updated_at') read_only_fields = ('id', 'created_at', 'updated_at') def get_full_path(self, obj): return obj.get_full_path() class RegionTreeSerializer(serializers.ModelSerializer): """Serializer for Region tree structure.""" children = serializers.SerializerMethodField() class Meta: model = Region fields = ('id', 'name', 'level', 'status', 'children') def get_children(self, obj): children = obj.get_children() return RegionTreeSerializer(children, many=True).data