feat: 添加所有 Django apps 的 Serializers
- User Serializers(基础、详情、更新、统计) - Region Serializers(基础、详情、树形结构) - Moderation Serializers(版主申请、权限、支持、限制) - Article Serializers(基础、创建、更新、审核、列表) - FeaturedService Serializers(基础、创建、更新、审核、列表) - Interaction Serializers(评论、评分、点赞、收藏)
This commit is contained in:
53
backend/apps/regions/serializers.py
Normal file
53
backend/apps/regions/serializers.py
Normal file
@@ -0,0 +1,53 @@
|
||||
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
|
||||
Reference in New Issue
Block a user