52 lines
2.1 KiB
Python
52 lines
2.1 KiB
Python
from rest_framework import serializers
|
|
from .models import Activity, ActivitySignup, Topic, Reply, TopicMedia
|
|
from shop.serializers import WeChatUserSerializer, ESP32ConfigSerializer, ServiceSerializer, VCCourseSerializer
|
|
|
|
class ActivitySerializer(serializers.ModelSerializer):
|
|
display_banner_url = serializers.ReadOnlyField()
|
|
|
|
class Meta:
|
|
model = Activity
|
|
fields = '__all__'
|
|
|
|
class ActivitySignupSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = ActivitySignup
|
|
fields = ['id', 'activity', 'user', 'signup_time', 'status']
|
|
read_only_fields = ['signup_time', 'status']
|
|
|
|
class TopicMediaSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = TopicMedia
|
|
fields = ['id', 'file', 'media_type', 'created_at']
|
|
|
|
class ReplySerializer(serializers.ModelSerializer):
|
|
author_info = WeChatUserSerializer(source='author', read_only=True)
|
|
media = TopicMediaSerializer(many=True, read_only=True)
|
|
|
|
class Meta:
|
|
model = Reply
|
|
fields = ['id', 'topic', 'content', 'author', 'author_info', 'reply_to', 'media', 'created_at']
|
|
|
|
class TopicSerializer(serializers.ModelSerializer):
|
|
author_info = WeChatUserSerializer(source='author', read_only=True)
|
|
replies = ReplySerializer(many=True, read_only=True)
|
|
media = TopicMediaSerializer(many=True, read_only=True)
|
|
is_verified_owner = serializers.BooleanField(read_only=True)
|
|
|
|
product_info = ESP32ConfigSerializer(source='related_product', read_only=True)
|
|
service_info = ServiceSerializer(source='related_service', read_only=True)
|
|
course_info = VCCourseSerializer(source='related_course', read_only=True)
|
|
|
|
class Meta:
|
|
model = Topic
|
|
fields = [
|
|
'id', 'title', 'category', 'content', 'author', 'author_info',
|
|
'related_product', 'product_info',
|
|
'related_service', 'service_info',
|
|
'related_course', 'course_info',
|
|
'view_count', 'is_pinned', 'created_at', 'updated_at',
|
|
'is_verified_owner', 'replies', 'media'
|
|
]
|
|
read_only_fields = ['view_count', 'created_at', 'updated_at', 'is_verified_owner']
|