Initial commit: React + Django 城市手册项目
- Django 4.2 + DRF + JWT + GraphQL - React 18 + MobX + styled-components - PostgreSQL 数据库 - Docker + Docker Compose + Nginx - 完整的功能模块(用户、版块、文章、服务、交互、版主管理) - 完整的文档(需求、部署、测试)
This commit is contained in:
92
backend/apps/moderation/serializers.py
Normal file
92
backend/apps/moderation/serializers.py
Normal file
@@ -0,0 +1,92 @@
|
||||
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')
|
||||
Reference in New Issue
Block a user