diff --git a/server/apps/exam/migrations/0004_auto_20221114_1108.py b/server/apps/exam/migrations/0004_auto_20221114_1108.py new file mode 100644 index 0000000..a26aad5 --- /dev/null +++ b/server/apps/exam/migrations/0004_auto_20221114_1108.py @@ -0,0 +1,18 @@ +# Generated by Django 3.0.5 on 2022-11-14 03:08 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('exam', '0003_auto_20221108_0901'), + ] + + operations = [ + migrations.AlterField( + model_name='examrecord', + name='end_time', + field=models.DateTimeField(blank=True, null=True, verbose_name='结束答题时间'), + ), + ] diff --git a/server/apps/exam/models.py b/server/apps/exam/models.py index dd35c3f..203f6a9 100644 --- a/server/apps/exam/models.py +++ b/server/apps/exam/models.py @@ -108,7 +108,7 @@ class ExamRecord(CommonAModel): score = models.FloatField(default=0, verbose_name='得分') took = models.IntegerField(default=0, verbose_name='耗时(秒)') start_time = models.DateTimeField(verbose_name='开始答题时间') - end_time = models.DateTimeField(verbose_name='结束答题时间') + end_time = models.DateTimeField(verbose_name='结束答题时间', null=True, blank=True) detail = models.ManyToManyField(Question, verbose_name='答题记录', through='AnswerDetail') is_pass = models.BooleanField(default=True, verbose_name='是否通过') exam = models.ForeignKey(Exam, verbose_name='关联的正式考试', null=True, blank=True, on_delete= models.SET_NULL) diff --git a/server/apps/exam/serializers.py b/server/apps/exam/serializers.py index 9313fbf..5c4afbf 100644 --- a/server/apps/exam/serializers.py +++ b/server/apps/exam/serializers.py @@ -164,7 +164,7 @@ class AnswerDetailSerializer(ModelSerializer): level = serializers.ReadOnlyField(source='question.level') class Meta: - model = PaperQuestion + model = AnswerDetail fields = ['id', 'question', 'name', 'options', 'right', 'type', 'level', 'total_score', 'questioncat_name', 'img', 'user_answer', 'score', 'is_right'] @@ -179,6 +179,6 @@ class AnswerDetailOutSerializer(ModelSerializer): level = serializers.ReadOnlyField(source='question.level') class Meta: - model = PaperQuestion + model = AnswerDetail fields = ['id', 'question', 'name', 'options', 'type', 'level', 'total_score', 'questioncat_name', 'img', 'user_answer', 'score', 'is_right'] diff --git a/server/apps/exam/views.py b/server/apps/exam/views.py index b80ef21..3b4f96a 100644 --- a/server/apps/exam/views.py +++ b/server/apps/exam/views.py @@ -287,6 +287,7 @@ class ExamViewSet(CreateUpdateCustomMixin, ModelViewSet): return Response(status=204) @action(methods=['post'], detail=True, perms_map=[{'post': '*'}], serializer_class=Serializer, permission_classes = [IsAuthenticated]) + @transaction.atomic def start(self, request, *args, **kwargs): """ 开始考试 @@ -371,6 +372,7 @@ class ExamRecordViewSet(ListModelMixin, DestroyModelMixin, GenericViewSet): return self.get_paginated_response(serializer.data) @action(methods=['post'], detail=True, perms_map=[{'post': '*'}], serializer_class=ExamRecordSubmitSerializer, permission_classes = [IsAuthenticated]) + @transaction.atomic def submit(self, request, pk=None): ''' 提交答卷 @@ -415,4 +417,4 @@ class ExamRecordViewSet(ListModelMixin, DestroyModelMixin, GenericViewSet): er.end_time = now er.is_submited = True er.save() - return Response() \ No newline at end of file + return Response(ExamRecordListSerializer(instance=er).data) \ No newline at end of file