feat: 添加所有 Django apps 的 Serializers
- User Serializers(基础、详情、更新、统计) - Region Serializers(基础、详情、树形结构) - Moderation Serializers(版主申请、权限、支持、限制) - Article Serializers(基础、创建、更新、审核、列表) - FeaturedService Serializers(基础、创建、更新、审核、列表) - Interaction Serializers(评论、评分、点赞、收藏)
This commit is contained in:
117
backend/apps/interactions/serializers.py
Normal file
117
backend/apps/interactions/serializers.py
Normal file
@@ -0,0 +1,117 @@
|
||||
from rest_framework import serializers
|
||||
from .models import Comment, Rating, Like, Favorite
|
||||
|
||||
|
||||
class CommentSerializer(serializers.ModelSerializer):
|
||||
"""Serializer for Comment model."""
|
||||
|
||||
target_type_display = serializers.CharField(source='get_target_type_display', read_only=True)
|
||||
ai_status_display = serializers.CharField(source='get_ai_status_display', read_only=True)
|
||||
author_username = serializers.CharField(source='author.username', read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = Comment
|
||||
fields = ('id', 'content', 'target_type', 'target_type_display', 'target_id',
|
||||
'author', 'author_username', 'ai_status', 'ai_status_display',
|
||||
'ai_rejection_reason', 'created_at')
|
||||
read_only_fields = ('id', 'author', 'ai_status', 'ai_rejection_reason', 'created_at')
|
||||
|
||||
def create(self, validated_data):
|
||||
validated_data['author'] = self.context['request'].user
|
||||
return super().create(validated_data)
|
||||
|
||||
|
||||
class CommentCreateSerializer(serializers.ModelSerializer):
|
||||
"""Serializer for creating comments."""
|
||||
|
||||
class Meta:
|
||||
model = Comment
|
||||
fields = ('content', 'target_type', 'target_id')
|
||||
|
||||
def create(self, validated_data):
|
||||
validated_data['author'] = self.context['request'].user
|
||||
return super().create(validated_data)
|
||||
|
||||
|
||||
class RatingSerializer(serializers.ModelSerializer):
|
||||
"""Serializer for Rating model."""
|
||||
|
||||
target_type_display = serializers.CharField(source='get_target_type_display', read_only=True)
|
||||
user_username = serializers.CharField(source='user.username', read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = Rating
|
||||
fields = ('id', 'user', 'user_username', 'target_type', 'target_type_display',
|
||||
'target_id', 'score', 'created_at')
|
||||
read_only_fields = ('id', 'user', 'created_at')
|
||||
|
||||
def create(self, validated_data):
|
||||
validated_data['user'] = self.context['request'].user
|
||||
return super().create(validated_data)
|
||||
|
||||
|
||||
class RatingCreateSerializer(serializers.ModelSerializer):
|
||||
"""Serializer for creating/updating ratings."""
|
||||
|
||||
class Meta:
|
||||
model = Rating
|
||||
fields = ('target_type', 'target_id', 'score')
|
||||
|
||||
def create(self, validated_data):
|
||||
validated_data['user'] = self.context['request'].user
|
||||
# Check if rating already exists
|
||||
Rating.objects.filter(
|
||||
user=validated_data['user'],
|
||||
target_type=validated_data['target_type'],
|
||||
target_id=validated_data['target_id']
|
||||
).delete()
|
||||
return super().create(validated_data)
|
||||
|
||||
|
||||
class LikeSerializer(serializers.ModelSerializer):
|
||||
"""Serializer for Like model."""
|
||||
|
||||
target_type_display = serializers.CharField(source='get_target_type_display', read_only=True)
|
||||
user_username = serializers.CharField(source='user.username', read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = Like
|
||||
fields = ('id', 'user', 'user_username', 'target_type', 'target_type_display',
|
||||
'target_id', 'created_at')
|
||||
read_only_fields = ('id', 'user', 'created_at')
|
||||
|
||||
|
||||
class FavoriteSerializer(serializers.ModelSerializer):
|
||||
"""Serializer for Favorite model."""
|
||||
|
||||
target_type_display = serializers.CharField(source='get_target_type_display', read_only=True)
|
||||
user_username = serializers.CharField(source='user.username', read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = Favorite
|
||||
fields = ('id', 'user', 'user_username', 'target_type', 'target_type_display',
|
||||
'target_id', 'created_at')
|
||||
read_only_fields = ('id', 'user', 'created_at')
|
||||
|
||||
|
||||
class FavoriteCreateSerializer(serializers.ModelSerializer):
|
||||
"""Serializer for creating/removing favorites."""
|
||||
|
||||
class Meta:
|
||||
model = Favorite
|
||||
fields = ('target_type', 'target_id')
|
||||
|
||||
def create(self, validated_data):
|
||||
validated_data['user'] = self.context['request'].user
|
||||
# Check if favorite already exists
|
||||
existing = Favorite.objects.filter(
|
||||
user=validated_data['user'],
|
||||
target_type=validated_data['target_type'],
|
||||
target_id=validated_data['target_id']
|
||||
).first()
|
||||
|
||||
if existing:
|
||||
existing.delete()
|
||||
return None # Return None to indicate removal
|
||||
|
||||
return super().create(validated_data)
|
||||
Reference in New Issue
Block a user