diff --git a/apps/edu/serializers.py b/apps/edu/serializers.py index a22fb967..7950f4ef 100644 --- a/apps/edu/serializers.py +++ b/apps/edu/serializers.py @@ -87,6 +87,14 @@ class ExamSerializer(CustomModelSerializer): validated_data.pop("paper", None) return super().update(instance, validated_data) +class ExamDetailSerializer(CustomModelSerializer): + paper_ = PaperSerializer(source='paper') + + class Meta: + model = Exam + fields = "__all__" + read_only_fields = EXCLUDE_FIELDS + class AnswerDetailOutSerializer(CustomModelSerializer): diff --git a/apps/edu/views.py b/apps/edu/views.py index 8a3ccf78..00e47a33 100644 --- a/apps/edu/views.py +++ b/apps/edu/views.py @@ -8,7 +8,7 @@ from django.db import transaction from .models import Questioncat, Question, Paper, PaperQuestion, Exam, ExamRecord, AnswerDetail from .serializers import (QuestioncatSerializer, QuestionSerializer, ExamSerializer, ExamRecordInitSerizlier, ExamRecordSerializer, ExamRecordDetailSerializer, ExamRecordSubmitSerializer, - PaperSerializer, PaperListSerializer, PaperPatchSerializer) + PaperSerializer, PaperListSerializer, PaperPatchSerializer, ExamDetailSerializer) from django.utils import timezone from rest_framework.response import Response from rest_framework.permissions import IsAuthenticated @@ -51,13 +51,14 @@ class ExamViewSet(CustomModelViewSet): queryset = Exam.objects.all() serializer_class = ExamSerializer filterset_class = ExamFilter + retrieve_serializer_class = ExamDetailSerializer def get_queryset(self): qs = super().get_queryset() if has_perm(self.request.user, 'exam.view'): return qs user:User = self.request.user - dept = user.belong_dept + dept = user.belong_dept if user else None qs = qs.filter(is_public=True) qs = qs|qs.filter(p_users=user) if dept: @@ -71,7 +72,7 @@ class ExamViewSet(CustomModelViewSet): return super().destroy(request, *args, **kwargs) @swagger_auto_schema(request_body=Serializer, responses={200: ExamRecordInitSerizlier}) - @action(methods=['post'], detail=True, perms_map=[{'post': '*'}], serializer_class=Serializer) + @action(methods=['post'], detail=True, perms_map={'post': '*'}, serializer_class=Serializer) def attend(self, request, *args, **kwargs): """ 参加考试 @@ -129,7 +130,7 @@ class ExamRecordViewSet(ListModelMixin, DestroyModelMixin, RetrieveModelMixin, C @swagger_auto_schema(request_body=ExamRecordSubmitSerializer, responses={200: ExamRecordSerializer}) - @action(methods=['post'], detail=True, perms_map=[{'post': '*'}], serializer_class=ExamRecordSubmitSerializer, permission_classes = [IsAuthenticated]) + @action(methods=['post'], detail=True, perms_map={'post': '*'}, serializer_class=ExamRecordSubmitSerializer, permission_classes = [IsAuthenticated]) @transaction.atomic def submit(self, request, pk=None): '''