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', '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']