diff --git a/backend/community/serializers.py b/backend/community/serializers.py index ed18821..63b6b9d 100644 --- a/backend/community/serializers.py +++ b/backend/community/serializers.py @@ -165,3 +165,18 @@ class AnnouncementSerializer(serializers.ModelSerializer): class Meta: model = Announcement fields = '__all__' + +class AdminActivitySerializer(serializers.ModelSerializer): + signup_form_config = serializers.JSONField(required=False) + description = serializers.CharField(style={'base_template': 'textarea.html'}) + + class Meta: + model = Activity + fields = '__all__' + +class AdminTopicSerializer(serializers.ModelSerializer): + content = serializers.CharField(style={'base_template': 'textarea.html'}) + + class Meta: + model = Topic + fields = '__all__' diff --git a/backend/community/views.py b/backend/community/views.py index 18b37be..5511cc4 100644 --- a/backend/community/views.py +++ b/backend/community/views.py @@ -11,7 +11,7 @@ from drf_spectacular.utils import extend_schema, OpenApiParameter, OpenApiTypes from shop.models import WeChatUser, Order from shop.views import get_wechat_pay_client from .models import Activity, ActivitySignup, Topic, Reply, TopicMedia, Announcement -from .serializers import ActivitySerializer, ActivitySignupSerializer, TopicSerializer, ReplySerializer, TopicMediaSerializer, AnnouncementSerializer +from .serializers import ActivitySerializer, ActivitySignupSerializer, TopicSerializer, ReplySerializer, TopicMediaSerializer, AnnouncementSerializer, AdminActivitySerializer, AdminTopicSerializer from .utils import get_current_wechat_user from .permissions import IsAuthorOrReadOnly @@ -441,6 +441,7 @@ class AdminPublishViewSet(viewsets.ViewSet): @extend_schema( summary="API发布活动", + request=AdminActivitySerializer, parameters=[ OpenApiParameter( name='apikey', @@ -469,7 +470,7 @@ class AdminPublishViewSet(viewsets.ViewSet): return Response({'error': 'Admin user not found with this phone number'}, status=404) data = request.data.copy() - serializer = ActivitySerializer(data=data) + serializer = AdminActivitySerializer(data=data) if serializer.is_valid(): activity = serializer.save(author=user) return Response(serializer.data, status=201) @@ -477,6 +478,7 @@ class AdminPublishViewSet(viewsets.ViewSet): @extend_schema( summary="API发布帖子", + request=AdminTopicSerializer, parameters=[ OpenApiParameter( name='apikey', @@ -505,8 +507,10 @@ class AdminPublishViewSet(viewsets.ViewSet): return Response({'error': 'Admin user not found with this phone number'}, status=404) data = request.data.copy() - serializer = TopicSerializer(data=data) + serializer = AdminTopicSerializer(data=data) if serializer.is_valid(): - topic = serializer.save(author=user, status='published') + # Only set status to published if not provided, otherwise respect the input + status = data.get('status', 'published') + topic = serializer.save(author=user, status=status) return Response(serializer.data, status=201) return Response(serializer.errors, status=400)