From 09b52b2a7e04c3dabc2689784622eb61279b63c5 Mon Sep 17 00:00:00 2001 From: zty Date: Mon, 24 Jun 2024 17:18:21 +0800 Subject: [PATCH] =?UTF-8?q?feat:exam/view.py=20=E5=A2=9E=E5=8A=A0=E6=8A=BD?= =?UTF-8?q?=E5=8D=B7=E8=80=83=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/exam/views.py | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/server/apps/exam/views.py b/server/apps/exam/views.py index 0c1a603..afd1719 100644 --- a/server/apps/exam/views.py +++ b/server/apps/exam/views.py @@ -530,6 +530,7 @@ class ExamViewSet(CreateUpdateCustomMixin, ModelViewSet): if chance_used > exam.chance: raise ParseError('考试机会已用完') if exam.paper: + details = [] er = ExamRecord() er.type = '正式考试' er.name = '正式考试' + datetime.now().strftime('%Y%m%d%H%M') @@ -543,20 +544,27 @@ class ExamViewSet(CreateUpdateCustomMixin, ModelViewSet): er.save() ret = {} ret['examrecord'] = er.id - if exam.paper.paper_types == 10: + if exam.paper.paper_types == '押题': pqs = PaperQuestion.objects.filter(paper=exam.paper).order_by('id') + for i in pqs: + details.append(AnswerDetail(examrecord=er, question=i.question, total_score=i.total_score)) else: # 查询此试卷有哪些分类 - cqs = exam.paper.category - print(cqs) + paper_obj = exam.paper.category.all() + cqs = [i.id for i in paper_obj] # 查询随机组卷的单选、多选、判断各多少题和不同分类 - single_qs = Question.objects.filter(Q(type="单选") & Q(category__in=cqs)).order_by('?')[:exam.paper.danxuan_count] - multiple_qs = Question.objects.filter(Q(type="多选") & Q(category__in=cqs)).order_by('?')[:exam.paper.duoxuan_count] - judge_qs = Question.objects.filter(Q(type="判断") & Q(category__in=cqs)).order_by('?')[:exam.paper.panduan_count] - pqs = list(single_qs) + list(multiple_qs) + list(judge_qs) - details = [] - for i in pqs: - details.append(AnswerDetail(examrecord=er, question=i.question, total_score=i.total_score)) + single_qs = Question.objects.filter(Q(type="单选") & Q(questioncat__in=cqs)).order_by('?')[:exam.paper.danxuan_count] + multiple_qs = Question.objects.filter(Q(type="多选") & Q(questioncat__in=cqs)).order_by('?')[:exam.paper.duoxuan_count] + judge_qs = Question.objects.filter(Q(type="判断") & Q(questioncat__in=cqs)).order_by('?')[:exam.paper.panduan_count] + pqs = single_qs | multiple_qs | judge_qs + for i in pqs: + if i.type == '单选': + total_score = exam.paper.danxuan_score + elif i.type == '多选': + total_score = exam.paper.duoxuan_score + else: + total_score = exam.paper.panduan_score + details.append(AnswerDetail(examrecord=er, question=i, total_score=total_score)) AnswerDetail.objects.bulk_create(details) ads = AnswerDetail.objects.select_related('question').filter(examrecord=er).order_by('id') ret['questions_'] = AnswerDetailOutSerializer(instance=ads, many=True).data