fix question ordering through mark systems

This commit is contained in:
Ross
2024-08-05 10:00:59 +01:00
parent a304c0b4dc
commit cff5a46e4c
14 changed files with 71 additions and 288 deletions
+14 -16
View File
@@ -947,6 +947,7 @@ class ExamViews(View, LoginRequiredMixin):
if not exam.exam_mode:
raise Http404("Packet not in exam mode")
# We don't worry about order here
questions = exam.exam_questions.all()
cids = self.UserAnswer.objects.filter(question__in=questions, exam__id=pk)
@@ -1304,7 +1305,7 @@ class ExamViews(View, LoginRequiredMixin):
@method_decorator(login_required)
def mark_overview(self, request, pk):
exam = get_object_or_404(self.Exam, pk=pk)
exam: ExamBase = get_object_or_404(self.Exam, pk=pk)
if not exam.exam_mode:
raise Http404("Packet not in exam mode")
@@ -1343,7 +1344,7 @@ class ExamViews(View, LoginRequiredMixin):
)
)
else:
questions = exam.exam_questions.all()
questions = exam.get_questions()
# Handle exams that require double marking
try:
@@ -1416,8 +1417,6 @@ class ExamViews(View, LoginRequiredMixin):
def exam_question_user_answer(self, request, pk: int, sk: int, c_or_u: str, user_or_cid: str):
exam: ExamBase = get_object_or_404(self.Exam, pk=pk)
#question = exam.exam_questions.all()[sk]
if c_or_u == "u":
user = get_object_or_404(User,pk=user_or_cid)
answer = exam.get_question_user_user_answer(sk, user)
@@ -1434,8 +1433,6 @@ class ExamViews(View, LoginRequiredMixin):
def exam_question_cid_user_answer(self, request, pk: int, sk: int, cid: str):
exam: ExamBase = get_object_or_404(self.Exam, pk=pk)
#question = exam.exam_questions.all()[sk]
cid_user = CidUser.objects.filter(cid=cid)
answer =exam.get_question_cid_user_answer(sk, cid_user)
@@ -1443,13 +1440,13 @@ class ExamViews(View, LoginRequiredMixin):
@method_decorator(login_required)
def exam_question_detail(self, request, pk, sk):
exam = get_object_or_404(self.Exam, pk=pk)
exam: ExamBase = get_object_or_404(self.Exam, pk=pk)
if request.user not in exam.author.all():
if not self.check_user_access(request.user, pk):
raise PermissionDenied
question = exam.exam_questions.all()[sk]
question = exam.get_questions()[sk]
exam_length = len(exam.exam_questions.all())
@@ -1924,7 +1921,7 @@ class ExamViews(View, LoginRequiredMixin):
return self.exam_scores_cid_user(request, pk, cid, user.passcode)
def exam_scores_cid_user(self, request, pk, cid=None, passcode="", user=None):
exam = get_object_or_404(self.Exam, pk=pk)
exam: ExamBase = get_object_or_404(self.Exam, pk=pk)
if not exam.exam_mode:
raise Http404("Packet not in exam mode")
@@ -1936,7 +1933,7 @@ class ExamViews(View, LoginRequiredMixin):
request.user = user
questions = (
exam.exam_questions.all()
exam.get_questions()
) # .prefetch_related("cid_user_answers", "answers")
# cid_user_answers = list(UserAnswer.objects.filter(cid=cid, exam__id=pk).prefetch_related("question"))
@@ -2080,7 +2077,7 @@ class ExamViews(View, LoginRequiredMixin):
Returns:
_type_: _description_
"""
exam = get_object_or_404(self.Exam, pk=pk)
exam: ExamBase = get_object_or_404(self.Exam, pk=pk)
if not exam.exam_mode:
raise Http404("Packet not in exam mode")
@@ -2109,9 +2106,9 @@ class ExamViews(View, LoginRequiredMixin):
if self.app_name in ("physics", "sbas", "longs"):
cached_scores = False
questions = exam.exam_questions.all()
questions = exam.get_questions()
else:
questions = exam.exam_questions.all().prefetch_related("answers")
questions = exam.get_questions().prefetch_related("answers")
# We could prefect the UserAnswers.answers here (if we didn't cache them)
cid_user_answers = self.UserAnswer.objects.select_related("question").filter(
@@ -2315,6 +2312,7 @@ class ExamViews(View, LoginRequiredMixin):
"mode": mode,
"plot": fig_html,
"cached_scores": cached_scores,
"can_edit": exam.check_user_can_edit(request.user),
}
if self.app_name == "rapids":
@@ -2329,7 +2327,7 @@ class ExamViews(View, LoginRequiredMixin):
)
def exam_stats(self, request, exam_id):
exam = get_object_or_404(self.Exam, pk=exam_id)
exam: ExamBase = get_object_or_404(self.Exam, pk=exam_id)
if not exam.exam_mode:
raise Http404("Packet not in exam mode")
@@ -2366,7 +2364,7 @@ class GenericViewBase:
"""
Return a json representation of the question when the exam is published
"""
exam = get_object_or_404(self.exam_object, pk=pk)
exam: ExamBase = get_object_or_404(self.exam_object, pk=pk)
print(request.POST["question_number"])
print(type(request.POST["question_number"]))
@@ -2374,7 +2372,7 @@ class GenericViewBase:
if not exam.publish_results:
raise Http404
question = exam.exam_questions.all()[int(request.POST["question_number"])]
question = exam.get_questions()[int(request.POST["question_number"])]
question_json = question.get_question_json(based=False, feedback=True)
return JsonResponse(question_json)