feat: 增加examdetail serializer

This commit is contained in:
caoqianming 2024-06-03 08:40:28 +08:00
parent 62b012b690
commit f5428febf3
2 changed files with 13 additions and 4 deletions

View File

@ -87,6 +87,14 @@ class ExamSerializer(CustomModelSerializer):
validated_data.pop("paper", None) validated_data.pop("paper", None)
return super().update(instance, validated_data) 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): class AnswerDetailOutSerializer(CustomModelSerializer):

View File

@ -8,7 +8,7 @@ from django.db import transaction
from .models import Questioncat, Question, Paper, PaperQuestion, Exam, ExamRecord, AnswerDetail from .models import Questioncat, Question, Paper, PaperQuestion, Exam, ExamRecord, AnswerDetail
from .serializers import (QuestioncatSerializer, QuestionSerializer, ExamSerializer, from .serializers import (QuestioncatSerializer, QuestionSerializer, ExamSerializer,
ExamRecordInitSerizlier, ExamRecordSerializer, ExamRecordDetailSerializer, ExamRecordSubmitSerializer, ExamRecordInitSerizlier, ExamRecordSerializer, ExamRecordDetailSerializer, ExamRecordSubmitSerializer,
PaperSerializer, PaperListSerializer, PaperPatchSerializer) PaperSerializer, PaperListSerializer, PaperPatchSerializer, ExamDetailSerializer)
from django.utils import timezone from django.utils import timezone
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated from rest_framework.permissions import IsAuthenticated
@ -51,13 +51,14 @@ class ExamViewSet(CustomModelViewSet):
queryset = Exam.objects.all() queryset = Exam.objects.all()
serializer_class = ExamSerializer serializer_class = ExamSerializer
filterset_class = ExamFilter filterset_class = ExamFilter
retrieve_serializer_class = ExamDetailSerializer
def get_queryset(self): def get_queryset(self):
qs = super().get_queryset() qs = super().get_queryset()
if has_perm(self.request.user, 'exam.view'): if has_perm(self.request.user, 'exam.view'):
return qs return qs
user:User = self.request.user 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.filter(is_public=True)
qs = qs|qs.filter(p_users=user) qs = qs|qs.filter(p_users=user)
if dept: if dept:
@ -71,7 +72,7 @@ class ExamViewSet(CustomModelViewSet):
return super().destroy(request, *args, **kwargs) return super().destroy(request, *args, **kwargs)
@swagger_auto_schema(request_body=Serializer, responses={200: ExamRecordInitSerizlier}) @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): 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}) @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 @transaction.atomic
def submit(self, request, pk=None): def submit(self, request, pk=None):
''' '''