From aa6b41ab1cf253a50705332b8afbce0859cfe15f Mon Sep 17 00:00:00 2001 From: Ross Date: Wed, 30 Mar 2022 20:37:21 +0100 Subject: [PATCH] . --- generic/views.py | 23 +++++++++++++++++++---- rapids/models.py | 40 ++++++++++++++++++++++++++++------------ 2 files changed, 47 insertions(+), 16 deletions(-) diff --git a/generic/views.py b/generic/views.py index c8a04da7..23bf4e46 100644 --- a/generic/views.py +++ b/generic/views.py @@ -429,8 +429,7 @@ class ExamViews(View, LoginRequiredMixin): # exam.get_exam_json() # TODO: check if mememory leak? - t = threading.Thread(target=self.exam_json, - args=(request, pk)) + t = threading.Thread(target=self.exam_json, args=(request, pk)) t.setDaemon(True) t.start() @@ -520,10 +519,26 @@ class ExamViews(View, LoginRequiredMixin): ) elif self.app_name == "rapids": questions = ( - exam.exam_questions.select_related() + exam.exam_questions.select_related( + "images", "abnormality", "region", "examination" + ) .all() - .prefetch_related("images", "abnormality", "region", "examination") + .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(), + ), + ) ) + # questions = ( + # exam.exam_questions.select_related() + # .all() + # .prefetch_related("images", "abnormality", "region", "examination") + # ) elif self.app_name == "physics": questions = ( exam.exam_questions.select_related("category").all() diff --git a/rapids/models.py b/rapids/models.py index 9b019c94..c84150ff 100644 --- a/rapids/models.py +++ b/rapids/models.py @@ -237,19 +237,35 @@ class Rapid(models.Model): def get_primary_answer(self): if self.normal: return "Normal" - elif ( - self.answers.filter( - proposed=False, status=Answer.MarkOptions.CORRECT - ).count() - > 0 - ): - return ( - self.answers.filter(proposed=False, status=Answer.MarkOptions.CORRECT) - .first() - .answer - ) else: - return "None yet..." + if hasattr(self, "prefetched_primary_answer") and self.prefetched_primary_answer: + ans = self.prefetched_primary_answer[0] + else: + ans = self.answers.filter( + proposed=False, status=Answer.MarkOptions.CORRECT + ).first() + + if ans is None: + return "None yet..." + else: + return ans.answer + + #def get_primary_answer(self): + # if self.normal: + # return "Normal" + # elif ( + # self.answers.filter( + # proposed=False, status=Answer.MarkOptions.CORRECT + # ).count() + # > 0 + # ): + # return ( + # self.answers.filter(proposed=False, status=Answer.MarkOptions.CORRECT) + # .first() + # .answer + # ) + # else: + # return "None yet..." def get_exams(self): e = self.exams.all().values_list("name", flat=True)