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:
65
backend/apps/articles/serializers.py
Normal file
65
backend/apps/articles/serializers.py
Normal file
@@ -0,0 +1,65 @@
|
||||
from rest_framework import serializers
|
||||
from .models import Article
|
||||
|
||||
|
||||
class ArticleSerializer(serializers.ModelSerializer):
|
||||
"""Serializer for Article model."""
|
||||
|
||||
article_type_display = serializers.CharField(source='get_article_type_display', read_only=True)
|
||||
status_display = serializers.CharField(source='get_publish_status_display', read_only=True)
|
||||
moderator_status_display = serializers.CharField(source='get_moderator_status_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)
|
||||
region_name = serializers.CharField(source='region.name', read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = Article
|
||||
fields = ('id', 'title', 'content', 'region', 'region_name', 'article_type', 'article_type_display',
|
||||
'author', 'author_username', 'moderator_status', 'moderator_status_display',
|
||||
'moderator_reviewer', 'moderator_reviewed_at', 'moderator_rejection_reason',
|
||||
'ai_status', 'ai_status_display', 'ai_reviewed_at', 'ai_rejection_reason',
|
||||
'publish_status', 'status_display', 'published_at', 'created_at', 'updated_at')
|
||||
read_only_fields = ('id', 'author', 'moderator_reviewer', 'moderator_reviewed_at',
|
||||
'ai_reviewed_at', 'published_at', 'created_at', 'updated_at')
|
||||
|
||||
|
||||
class ArticleCreateSerializer(serializers.ModelSerializer):
|
||||
"""Serializer for creating articles."""
|
||||
|
||||
class Meta:
|
||||
model = Article
|
||||
fields = ('title', 'content', 'region', 'article_type')
|
||||
|
||||
def create(self, validated_data):
|
||||
validated_data['author'] = self.context['request'].user
|
||||
return super().create(validated_data)
|
||||
|
||||
|
||||
class ArticleUpdateSerializer(serializers.ModelSerializer):
|
||||
"""Serializer for updating articles."""
|
||||
|
||||
class Meta:
|
||||
model = Article
|
||||
fields = ('title', 'content', 'article_type')
|
||||
|
||||
|
||||
class ArticleReviewSerializer(serializers.Serializer):
|
||||
"""Serializer for article review actions."""
|
||||
|
||||
action = serializers.ChoiceField(choices=['approve', 'reject'])
|
||||
reason = serializers.CharField(required=False, allow_blank=True)
|
||||
|
||||
|
||||
class ArticleListSerializer(serializers.ModelSerializer):
|
||||
"""Simplified serializer for article list."""
|
||||
|
||||
article_type_display = serializers.CharField(source='get_article_type_display', read_only=True)
|
||||
author_username = serializers.CharField(source='author.username', read_only=True)
|
||||
region_name = serializers.CharField(source='region.name', read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = Article
|
||||
fields = ('id', 'title', 'article_type', 'article_type_display',
|
||||
'author', 'author_username', 'region', 'region_name',
|
||||
'publish_status', 'created_at')
|
||||
read_only_fields = ('id', 'created_at')
|
||||
Reference in New Issue
Block a user