.
This commit is contained in:
+21
-4
@@ -158,9 +158,12 @@ class AnatomyQuestion(models.Model):
|
|||||||
return reverse("anatomy:question_detail", kwargs={"pk": self.pk})
|
return reverse("anatomy:question_detail", kwargs={"pk": self.pk})
|
||||||
|
|
||||||
def get_primary_answer(self):
|
def get_primary_answer(self):
|
||||||
ans = self.answers.filter(
|
if hasattr(self, "prefetched_primary_answer"):
|
||||||
proposed=False, status=Answer.MarkOptions.CORRECT
|
ans = self.prefetched_primary_answer[0]
|
||||||
).first()
|
else:
|
||||||
|
ans = self.answers.filter(
|
||||||
|
proposed=False, status=Answer.MarkOptions.CORRECT
|
||||||
|
).first()
|
||||||
# ans = self.answers.first()
|
# ans = self.answers.first()
|
||||||
|
|
||||||
if ans is None:
|
if ans is None:
|
||||||
@@ -214,13 +217,26 @@ class AnatomyQuestion(models.Model):
|
|||||||
return unmarked_answers
|
return unmarked_answers
|
||||||
|
|
||||||
def get_unmarked_user_answer_count(self, exam_pk=None):
|
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):
|
def get_marked_answers(self):
|
||||||
return set(
|
return set(
|
||||||
[
|
[
|
||||||
i.answer_compare
|
i.answer_compare
|
||||||
for i in self.answers.filter(proposed=False)
|
for i in self.answers.filter(proposed=False)
|
||||||
|
# for i in self.answers.all()
|
||||||
if i.status != i.MarkOptions.UNMARKED
|
if i.status != i.MarkOptions.UNMARKED
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
@@ -236,6 +252,7 @@ class AnatomyQuestion(models.Model):
|
|||||||
[
|
[
|
||||||
str(i)
|
str(i)
|
||||||
for i in self.answers.filter(proposed=False)
|
for i in self.answers.filter(proposed=False)
|
||||||
|
# for i in self.answers.all()
|
||||||
if i.status == i.MarkOptions.CORRECT
|
if i.status == i.MarkOptions.CORRECT
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -340,8 +340,6 @@ def mark(request, exam_pk, sk, unmarked_exam_answers_only=True, review=False):
|
|||||||
except IndexError:
|
except IndexError:
|
||||||
raise Http404("Exam question does not exist")
|
raise Http404("Exam question does not exist")
|
||||||
|
|
||||||
# unmarked_user_answers = question.get_unmarked_user_answers()
|
|
||||||
|
|
||||||
if request.method == "POST":
|
if request.method == "POST":
|
||||||
|
|
||||||
form = MarkAnatomyQuestionForm(request.POST)
|
form = MarkAnatomyQuestionForm(request.POST)
|
||||||
|
|||||||
+39
-10
@@ -446,15 +446,16 @@ class ExamViews(View, LoginRequiredMixin):
|
|||||||
"region",
|
"region",
|
||||||
"examination",
|
"examination",
|
||||||
"question_type",
|
"question_type",
|
||||||
).all()
|
)
|
||||||
# .prefetch_related(
|
.all()
|
||||||
# Prefetch(
|
.prefetch_related(
|
||||||
# "answers",
|
Prefetch(
|
||||||
# queryset=self.Answer.objects.filter(
|
"answers",
|
||||||
# proposed=False, status=self.Answer.MarkOptions.CORRECT
|
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":
|
elif self.app_name == "rapids":
|
||||||
questions = (
|
questions = (
|
||||||
@@ -622,7 +623,35 @@ class ExamViews(View, LoginRequiredMixin):
|
|||||||
if not self.check_user_access(request.user, pk):
|
if not self.check_user_access(request.user, pk):
|
||||||
raise PermissionDenied
|
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
|
# Handle exams that require double marking
|
||||||
try:
|
try:
|
||||||
|
|||||||
Reference in New Issue
Block a user