This commit is contained in:
Ross
2021-12-19 14:57:47 +00:00
parent fccf25e2a1
commit afb1dacbb8
3 changed files with 60 additions and 16 deletions
+21 -4
View File
@@ -158,9 +158,12 @@ class AnatomyQuestion(models.Model):
return reverse("anatomy:question_detail", kwargs={"pk": self.pk})
def get_primary_answer(self):
ans = self.answers.filter(
proposed=False, status=Answer.MarkOptions.CORRECT
).first()
if hasattr(self, "prefetched_primary_answer"):
ans = self.prefetched_primary_answer[0]
else:
ans = self.answers.filter(
proposed=False, status=Answer.MarkOptions.CORRECT
).first()
# ans = self.answers.first()
if ans is None:
@@ -214,13 +217,26 @@ class AnatomyQuestion(models.Model):
return unmarked_answers
def get_unmarked_user_answer_count(self, exam_pk=None):
return len(self.get_unmarked_user_answers(exam_pk))
if exam_pk is None:
return self.cid_user_answers.filter(
score=Answer.MarkOptions.UNMARKED
).count()
else:
if hasattr(self, "prefetched_unmarked_cid_answers"):
return len(self.prefetched_unmarked_cid_answers)
else:
return self.cid_user_answers.filter(
score=Answer.MarkOptions.UNMARKED, exam__id=exam_pk
).count()
# return len(self.get_unmarked_user_answers(exam_pk))
def get_marked_answers(self):
return set(
[
i.answer_compare
for i in self.answers.filter(proposed=False)
# for i in self.answers.all()
if i.status != i.MarkOptions.UNMARKED
]
)
@@ -236,6 +252,7 @@ class AnatomyQuestion(models.Model):
[
str(i)
for i in self.answers.filter(proposed=False)
# for i in self.answers.all()
if i.status == i.MarkOptions.CORRECT
]
)
-2
View File
@@ -340,8 +340,6 @@ def mark(request, exam_pk, sk, unmarked_exam_answers_only=True, review=False):
except IndexError:
raise Http404("Exam question does not exist")
# unmarked_user_answers = question.get_unmarked_user_answers()
if request.method == "POST":
form = MarkAnatomyQuestionForm(request.POST)
+39 -10
View File
@@ -446,15 +446,16 @@ class ExamViews(View, LoginRequiredMixin):
"region",
"examination",
"question_type",
).all()
# .prefetch_related(
# Prefetch(
# "answers",
# queryset=self.Answer.objects.filter(
# proposed=False, status=self.Answer.MarkOptions.CORRECT
# ),
# )
# )
)
.all()
.prefetch_related(
Prefetch(
"answers",
queryset=self.Answer.objects.filter(proposed=False, status=self.Answer.MarkOptions.CORRECT),
to_attr="prefetched_primary_answer"
#queryset=self.Answer.objects.filter(),
),
)
)
elif self.app_name == "rapids":
questions = (
@@ -622,7 +623,35 @@ class ExamViews(View, LoginRequiredMixin):
if not self.check_user_access(request.user, pk):
raise PermissionDenied
questions = exam.exam_questions.all()
if self.app_name == "anatomy":
questions = (
exam.exam_questions.select_related(
"modality",
"structure",
"body_part",
"region",
"examination",
"question_type",
)
.all()
.prefetch_related(
#"cid_user_answers",
Prefetch(
"answers",
queryset=self.Answer.objects.filter(proposed=False, status=self.Answer.MarkOptions.CORRECT),
to_attr="prefetched_primary_answer"
#queryset=self.Answer.objects.filter(),
),
Prefetch(
"cid_user_answers",
queryset=self.CidUserAnswer.objects.filter(score=self.Answer.MarkOptions.UNMARKED, exam__id=pk),
to_attr="prefetched_unmarked_cid_answers"
#queryset=self.Answer.objects.filter(),
),
)
)
else:
questions = exam.exam_questions.all()
# Handle exams that require double marking
try: