Files
chengshishouce/backend/apps/moderation/serializers.py
mashen edec596516 feat: 添加所有 Django apps 的 Serializers
- User Serializers(基础、详情、更新、统计)
- Region Serializers(基础、详情、树形结构)
- Moderation Serializers(版主申请、权限、支持、限制)
- Article Serializers(基础、创建、更新、审核、列表)
- FeaturedService Serializers(基础、创建、更新、审核、列表)
- Interaction Serializers(评论、评分、点赞、收藏)
2026-04-09 13:42:02 +00:00

92 lines
3.9 KiB
Python

from rest_framework import serializers
from .models import (
ModeratorApplication,
ModeratorPermission,
ModeratorSupport,
PermissionRestriction
)
class ModeratorApplicationSerializer(serializers.ModelSerializer):
"""Serializer for ModeratorApplication model."""
status_display = serializers.CharField(source='get_status_display', read_only=True)
rank_display = serializers.CharField(source='get_rank_display', read_only=True)
applicant_username = serializers.CharField(source='applicant.username', read_only=True)
region_name = serializers.CharField(source='region.name', read_only=True)
region_path = serializers.SerializerMethodField()
is_expired = serializers.BooleanField(read_only=True)
class Meta:
model = ModeratorApplication
fields = ('id', 'applicant', 'applicant_username', 'region', 'region_name', 'region_path',
'support_count', 'deadline', 'status', 'status_display', 'rank',
'is_expired', 'reviewed_by', 'reviewed_at', 'created_at')
read_only_fields = ('id', 'created_at', 'reviewed_by', 'reviewed_at')
def get_region_path(self, obj):
return obj.region.get_full_path()
class ModeratorApplicationCreateSerializer(serializers.ModelSerializer):
"""Serializer for creating moderator applications."""
class Meta:
model = ModeratorApplication
fields = ('region', 'rank', 'deadline')
def create(self, validated_data):
validated_data['applicant'] = self.context['request'].user
return super().create(validated_data)
class ModeratorPermissionSerializer(serializers.ModelSerializer):
"""Serializer for ModeratorPermission model."""
status_display = serializers.CharField(source='get_status_display', read_only=True)
rank_display = serializers.CharField(source='get_rank_display', read_only=True)
moderator_username = serializers.CharField(source='moderator.username', read_only=True)
region_name = serializers.CharField(source='region.name', read_only=True)
is_active = serializers.BooleanField(read_only=True)
class Meta:
model = ModeratorPermission
fields = ('id', 'moderator', 'moderator_username', 'region', 'region_name',
'rank', 'rank_display', 'status', 'status_display', 'is_active',
'restricted_until', 'created_at')
read_only_fields = ('id', 'created_at')
class ModeratorSupportSerializer(serializers.ModelSerializer):
"""Serializer for ModeratorSupport model."""
supporter_username = serializers.CharField(source='supporter.username', read_only=True)
application_region_name = serializers.CharField(source='application.region.name', read_only=True)
class Meta:
model = ModeratorSupport
fields = ('id', 'supporter', 'supporter_username', 'application',
'application_region_name', 'created_at')
read_only_fields = ('id', 'created_at')
def create(self, validated_data):
validated_data['supporter'] = self.context['request'].user
# Increment support count
application = validated_data['application']
application.support_count += 1
application.save()
return super().create(validated_data)
class PermissionRestrictionSerializer(serializers.ModelSerializer):
"""Serializer for PermissionRestriction model."""
restriction_type_display = serializers.CharField(source='get_restriction_type_display', read_only=True)
operator_username = serializers.CharField(source='operator.username', read_only=True)
target_moderator_username = serializers.CharField(source='target_moderator.username', read_only=True)
class Meta:
model = PermissionRestriction
fields = ('id', 'operator', 'operator_username', 'target_moderator', 'target_moderator_username',
'restriction_type', 'restriction_type_display', 'start_time', 'end_time', 'created_at')
read_only_fields = ('id', 'created_at')