- Django 4.2 + DRF + JWT + GraphQL - React 18 + MobX + styled-components - PostgreSQL 数据库 - Docker + Docker Compose + Nginx - 完整的功能模块(用户、版块、文章、服务、交互、版主管理) - 完整的文档(需求、部署、测试)
53 lines
2.0 KiB
Python
53 lines
2.0 KiB
Python
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 |