From 66e8e5b22a052f3a600f78d10379540d976ee518 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 2 Aug 2021 10:15:32 +0100 Subject: [PATCH 01/23] . --- longs/templates/longs/exam_overview.html | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/longs/templates/longs/exam_overview.html b/longs/templates/longs/exam_overview.html index 1541ad9b..97239ec9 100644 --- a/longs/templates/longs/exam_overview.html +++ b/longs/templates/longs/exam_overview.html @@ -32,9 +32,11 @@
{% for series in question.series.all %}
- Series {{forloop.counter0 }}:
+ Series {{forloop.counter }}:
{{series.get_block}}
+ {% empty %} + No series {% endfor %}
Author(s): {{question.get_authors}} From cf7890371cc2d00826de541473d8c00e3ca52b7a Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 2 Aug 2021 10:26:31 +0100 Subject: [PATCH 02/23] . --- generic/views.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/generic/views.py b/generic/views.py index 3cade000..85c9683a 100644 --- a/generic/views.py +++ b/generic/views.py @@ -383,8 +383,11 @@ class ExamViews(View, LoginRequiredMixin): active_exams = {"exams": []} + group_map = {"rapids" : "rapid_checker", "anatomy" : "anatomy_checker", "longs":"long_checker"} + exam_group = group_map[self.app_name] + for exam in exams: - if exam.active: + if exam.active or (request.user is not None and request.user.groups.filter(name=exam_group).exists()): if exam.json_creation_time: creation_time = exam.json_creation_time.isoformat() else: @@ -402,6 +405,7 @@ class ExamViews(View, LoginRequiredMixin): "eid": "{}/{}".format(self.question_type, exam.pk), "json_creation_time": creation_time, "exam_json_id": exam.exam_json_id + "exam_active": exam.active } if self.question_type == "long": From cb86073e15d6137eaf3de9da6f1278c3df979217 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 2 Aug 2021 10:28:39 +0100 Subject: [PATCH 03/23] . --- generic/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generic/views.py b/generic/views.py index 85c9683a..b19782a3 100644 --- a/generic/views.py +++ b/generic/views.py @@ -404,7 +404,7 @@ class ExamViews(View, LoginRequiredMixin): "type": self.question_type, "eid": "{}/{}".format(self.question_type, exam.pk), "json_creation_time": creation_time, - "exam_json_id": exam.exam_json_id + "exam_json_id": exam.exam_json_id, "exam_active": exam.active } From 2de91569190f47ad02139d5142ea23d1ba64fb5e Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 2 Aug 2021 10:33:29 +0100 Subject: [PATCH 04/23] . --- generic/views.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/generic/views.py b/generic/views.py index b19782a3..00270bd0 100644 --- a/generic/views.py +++ b/generic/views.py @@ -157,6 +157,9 @@ class ExamViews(View, LoginRequiredMixin): self.question_type = question_type self.loadJsonAnswer = loadJsonAnswer + group_map = {"rapids" : "rapid_checker", "anatomy" : "anatomy_checker", "longs":"long_checker"} + exam_group = group_map[self.app_name] + def check_user_access(self, user): """Check if a user should be able to access a view @@ -383,11 +386,8 @@ class ExamViews(View, LoginRequiredMixin): active_exams = {"exams": []} - group_map = {"rapids" : "rapid_checker", "anatomy" : "anatomy_checker", "longs":"long_checker"} - exam_group = group_map[self.app_name] - for exam in exams: - if exam.active or (request.user is not None and request.user.groups.filter(name=exam_group).exists()): + if exam.active or self.check_user_access(request.user): if exam.json_creation_time: creation_time = exam.json_creation_time.isoformat() else: @@ -450,7 +450,7 @@ class ExamViews(View, LoginRequiredMixin): """ exam = get_object_or_404(self.Exam, pk=pk) - if not exam.active: + if not exam.active or not self.check_user_access(request.user): raise Http404("No available exam") exam_json = exam.get_exam_json(based=False) @@ -460,7 +460,7 @@ class ExamViews(View, LoginRequiredMixin): exam = get_object_or_404(self.Exam, pk=pk) - if not exam.active: + if not exam.active or not self.check_user_access(request.user): raise Http404("No available exam") From 0af74b7a4b6252e271e3f819697e63e7c3d99c41 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 2 Aug 2021 10:34:55 +0100 Subject: [PATCH 05/23] . --- generic/views.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/generic/views.py b/generic/views.py index 00270bd0..035bad24 100644 --- a/generic/views.py +++ b/generic/views.py @@ -157,8 +157,9 @@ class ExamViews(View, LoginRequiredMixin): self.question_type = question_type self.loadJsonAnswer = loadJsonAnswer - group_map = {"rapids" : "rapid_checker", "anatomy" : "anatomy_checker", "longs":"long_checker"} - exam_group = group_map[self.app_name] + # THis may be better than check_user_access below + #group_map = {"rapids" : "rapid_checker", "anatomy" : "anatomy_checker", "longs":"long_checker"} + #exam_group = group_map[self.app_name] def check_user_access(self, user): """Check if a user should be able to access a view From 414de62118b62d629515de291d2f0f182b716937 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 2 Aug 2021 10:38:19 +0100 Subject: [PATCH 06/23] . --- generic/views.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/generic/views.py b/generic/views.py index 035bad24..25cc8bcc 100644 --- a/generic/views.py +++ b/generic/views.py @@ -178,6 +178,8 @@ class ExamViews(View, LoginRequiredMixin): return False if self.app_name == "physics" and not user.groups.filter(name='physic_checker').exists(): return False + if self.app_name == "sbas" and not user.groups.filter(name='sba_checker').exists(): + return False return True @@ -451,7 +453,7 @@ class ExamViews(View, LoginRequiredMixin): """ exam = get_object_or_404(self.Exam, pk=pk) - if not exam.active or not self.check_user_access(request.user): + if not exam.active and not self.check_user_access(request.user): raise Http404("No available exam") exam_json = exam.get_exam_json(based=False) @@ -461,7 +463,7 @@ class ExamViews(View, LoginRequiredMixin): exam = get_object_or_404(self.Exam, pk=pk) - if not exam.active or not self.check_user_access(request.user): + if not exam.active and not self.check_user_access(request.user): raise Http404("No available exam") From 83f7361c79e737d9febde716988b1fbb4c9f2ad0 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 2 Aug 2021 10:40:03 +0100 Subject: [PATCH 07/23] . --- generic/views.py | 1 + 1 file changed, 1 insertion(+) diff --git a/generic/views.py b/generic/views.py index 25cc8bcc..75015722 100644 --- a/generic/views.py +++ b/generic/views.py @@ -457,6 +457,7 @@ class ExamViews(View, LoginRequiredMixin): raise Http404("No available exam") exam_json = exam.get_exam_json(based=False) + #exam_json["exam_active"] = False return JsonResponse(exam_json) def exam_json(self, request, pk): From b8cfe005de1628bc4241dac8bafccb4f0ff1841c Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 2 Aug 2021 10:42:39 +0100 Subject: [PATCH 08/23] . --- rad/views.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/rad/views.py b/rad/views.py index 93949910..d80e7728 100644 --- a/rad/views.py +++ b/rad/views.py @@ -131,6 +131,11 @@ def active_exams(request): active_exams = {"exams": exams} + if request.user: + active_exams["user": request.user.username] + else: + active_exams["user": False] + return JsonResponse(active_exams) def active_exams_unbased(request): From 24d14b6a66f29acaecc606268e1efd0f5d8de3f5 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 2 Aug 2021 10:45:21 +0100 Subject: [PATCH 09/23] . --- rad/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rad/views.py b/rad/views.py index d80e7728..c44de599 100644 --- a/rad/views.py +++ b/rad/views.py @@ -132,9 +132,9 @@ def active_exams(request): active_exams = {"exams": exams} if request.user: - active_exams["user": request.user.username] + active_exams["user"] = request.user.username else: - active_exams["user": False] + active_exams["user"] = False return JsonResponse(active_exams) From 01e5bf34f276cc6353e9f85bf3305f35031ecae9 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 2 Aug 2021 11:41:26 +0100 Subject: [PATCH 10/23] . --- generic/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generic/views.py b/generic/views.py index 75015722..a5af799b 100644 --- a/generic/views.py +++ b/generic/views.py @@ -512,7 +512,7 @@ class ExamViews(View, LoginRequiredMixin): question = get_object_or_404(self.Question, pk=sk) exam = get_object_or_404(self.Exam, pk=pk) - if not exam.active: + if not exam.active and not self.check_user_access(request.user): raise Http404("No available exam") From 9132ba7a1456bcf053fbfda51af2d02f0110fb1c Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 2 Aug 2021 11:41:56 +0100 Subject: [PATCH 11/23] . --- generic/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generic/views.py b/generic/views.py index a5af799b..2f62378a 100644 --- a/generic/views.py +++ b/generic/views.py @@ -528,7 +528,7 @@ class ExamViews(View, LoginRequiredMixin): question = get_object_or_404(self.Question, pk=sk) exam = get_object_or_404(self.Exam, pk=pk) - if not exam.active: + if not exam.active and not self.check_user_access(request.user): raise Http404("No available exam") return redirect("{}:question_json_unbased".format(self.app_name), pk=sk) From 092527f5127e70168473aa0e485f23fd3144a4e9 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 2 Aug 2021 11:55:27 +0100 Subject: [PATCH 12/23] . --- generic/views.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/generic/views.py b/generic/views.py index 2f62378a..cfa79c50 100644 --- a/generic/views.py +++ b/generic/views.py @@ -440,6 +440,8 @@ class ExamViews(View, LoginRequiredMixin): if ret: n = n + 1 + else: + return ret # print(UserAnswer.objects.filter(exam__id=q["eid"])) # print(request.urlencode()) From 694d629c7494fb596ce801ff78674ad4cd4a5186 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 2 Aug 2021 12:00:24 +0100 Subject: [PATCH 13/23] . --- longs/views.py | 8 ++++---- physics/views.py | 8 ++++---- rapids/views.py | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/longs/views.py b/longs/views.py index 82acfe76..d9232cba 100755 --- a/longs/views.py +++ b/longs/views.py @@ -571,19 +571,19 @@ def loadJsonAnswer(answer): if (not isinstance(answer["cid"], int)) or ( not isinstance(eid, int) or (not isinstance(answer["ans"], str)) ): - return JsonResponse( + return False, JsonResponse( {"success": False, "error": "cid or eid or answers not defined"} ) # The model should catch invalid data but this should be less intensive max_int = 999999999999999999999 if answer["cid"] > max_int or eid > max_int: - return JsonResponse({"success": False, "error": "invalid cid"}) + return False, JsonResponse({"success": False, "error": "invalid cid"}) exam = get_object_or_404(Exam, pk=eid) if not exam.active: - return JsonResponse( + return False, JsonResponse( {"success": False, "error": "No active exam: {}".format(eid)} ) @@ -627,7 +627,7 @@ def loadJsonAnswer(answer): ans.full_clean() ans.save() - return True + return True, None @login_required diff --git a/physics/views.py b/physics/views.py index 967d9665..3162c615 100644 --- a/physics/views.py +++ b/physics/views.py @@ -245,17 +245,17 @@ def exam_take(request, pk): def loadJsonAnswer(answer): # As access is not restricted make sure the data appears valid if (not isinstance(answer["cid"], int)) or (not isinstance(answer["eid"], int)): - return JsonResponse({"success": False, "error": "invalid"}) + return False, JsonResponse({"success": False, "error": "invalid"}) # The model should catch invalid data but this should be less intensive max_int = 10000000 if answer["cid"] > max_int or answer["eid"] > max_int: - return JsonResponse({"success": False}) + return False, JsonResponse({"success": False}) exam = get_object_or_404(Exam, pk=answer["eid"]) if not exam.active: - return JsonResponse( + return False, JsonResponse( {"success": False, "error": "No active exam: {}".format(answer["eid"])} ) @@ -296,6 +296,6 @@ def loadJsonAnswer(answer): ans.full_clean() ans.save() - return True + return True, None PhysicsExamViews = ExamViews(Exam, Question, "physics", "physics", loadJsonAnswer) \ No newline at end of file diff --git a/rapids/views.py b/rapids/views.py index 5faa5816..b5560cee 100755 --- a/rapids/views.py +++ b/rapids/views.py @@ -580,19 +580,19 @@ def loadJsonAnswer(answer): if (not isinstance(answer["cid"], int)) or ( not isinstance(eid, int) or (not isinstance(answer["ans"], str)) ): - return JsonResponse( + return False, JsonResponse( {"success": False, "error": "cid or eid or answers not defined"} ) # The model should catch invalid data but this should be less intensive max_int = 999999999999999999999 if answer["cid"] > max_int or eid > max_int: - return JsonResponse({"success": False, "error": "invalid cid"}) + return False, JsonResponse({"success": False, "error": "invalid cid"}) exam = get_object_or_404(Exam, pk=eid) if not exam.active: - return JsonResponse( + return False, JsonResponse( {"success": False, "error": "No active exam: {}".format(eid)} ) @@ -631,7 +631,7 @@ def loadJsonAnswer(answer): ans.full_clean() ans.save() - return True + return True, None # @user_passes_test(user_is_admin, login_url="/accounts/login") From 0b367312c516af1f763eaae5e6a2dbdff3c4c6e2 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 2 Aug 2021 12:00:29 +0100 Subject: [PATCH 14/23] . --- anatomy/views.py | 14 +++++++------- generic/views.py | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/anatomy/views.py b/anatomy/views.py index 8778bbc9..0e21b304 100644 --- a/anatomy/views.py +++ b/anatomy/views.py @@ -238,19 +238,19 @@ def loadJsonAnswer(answer): if (not isinstance(answer["cid"], int)) or ( not isinstance(eid, int) or (not isinstance(answer["ans"], str)) ): - return JsonResponse({"success": False, "error": "cid or eid or answers not defined"}) + return False, JsonResponse({"success": False, "error": "cid or eid or answers not defined"}) # The model should catch invalid data but this should be less intensive max_int = 999999999999999999999 if answer["cid"] > max_int or eid > max_int: - return JsonResponse({"success": False, "error": "invalid cid"}) + return False, JsonResponse({"success": False, "error": "invalid cid"}) exam = get_object_or_404(Exam, pk=eid) - if not exam.active: - return JsonResponse( - {"success": False, "error": "No active exam: {}".format(eid)} - ) + #if not exam.active: + # return False, JsonResponse( + # {"success": False, "error": "No active exam: {}".format(eid)} + # ) exiting_answers = CidUserAnswer.objects.filter( question__id=answer["qid"], exam__id=eid, cid=answer["cid"] @@ -272,7 +272,7 @@ def loadJsonAnswer(answer): ans.full_clean() ans.save() - return True + return True, None #@csrf_exempt diff --git a/generic/views.py b/generic/views.py index cfa79c50..41af8d26 100644 --- a/generic/views.py +++ b/generic/views.py @@ -433,12 +433,12 @@ class ExamViews(View, LoginRequiredMixin): n = 0 for answer in json.loads(request.POST.get("answers")): - ret = self.loadJsonAnswer(answer) + ret_status, ret = self.loadJsonAnswer(answer) #if ret is not True: # return ret - if ret: + if ret_status: n = n + 1 else: return ret From cad01701673540c388e5ec9eac8e6957d9ecef95 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 2 Aug 2021 12:01:55 +0100 Subject: [PATCH 15/23] . --- longs/views.py | 8 ++++---- physics/views.py | 8 ++++---- rapids/views.py | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/longs/views.py b/longs/views.py index d9232cba..c4b060ef 100755 --- a/longs/views.py +++ b/longs/views.py @@ -582,10 +582,10 @@ def loadJsonAnswer(answer): exam = get_object_or_404(Exam, pk=eid) - if not exam.active: - return False, JsonResponse( - {"success": False, "error": "No active exam: {}".format(eid)} - ) + #if not exam.active: + # return False, JsonResponse( + # {"success": False, "error": "No active exam: {}".format(eid)} + # ) exiting_answers = CidUserAnswer.objects.filter( question__id=answer["qid"], exam__id=eid, cid=answer["cid"] diff --git a/physics/views.py b/physics/views.py index 3162c615..90001f2e 100644 --- a/physics/views.py +++ b/physics/views.py @@ -254,10 +254,10 @@ def loadJsonAnswer(answer): exam = get_object_or_404(Exam, pk=answer["eid"]) - if not exam.active: - return False, JsonResponse( - {"success": False, "error": "No active exam: {}".format(answer["eid"])} - ) + #if not exam.active: + # return False, JsonResponse( + # {"success": False, "error": "No active exam: {}".format(answer["eid"])} + # ) questions = defaultdict(dict) diff --git a/rapids/views.py b/rapids/views.py index b5560cee..7587a5b8 100755 --- a/rapids/views.py +++ b/rapids/views.py @@ -591,10 +591,10 @@ def loadJsonAnswer(answer): exam = get_object_or_404(Exam, pk=eid) - if not exam.active: - return False, JsonResponse( - {"success": False, "error": "No active exam: {}".format(eid)} - ) + #if not exam.active: + # return False, JsonResponse( + # {"success": False, "error": "No active exam: {}".format(eid)} + # ) exiting_answers = CidUserAnswer.objects.filter( question__id=answer["qid"], exam__id=eid, cid=answer["cid"] From cba8f5c0c01f99108b78f0b3e26a1029fee4853d Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 2 Aug 2021 12:06:57 +0100 Subject: [PATCH 16/23] . --- longs/templates/longs/mark_answer.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/longs/templates/longs/mark_answer.html b/longs/templates/longs/mark_answer.html index 39184adb..b0a9ce15 100644 --- a/longs/templates/longs/mark_answer.html +++ b/longs/templates/longs/mark_answer.html @@ -49,7 +49,7 @@ {% else %} - (no more answers for this question to mark) + All question answers marker. Return to marking overview {% endif %}
From 21e485f2948f3e7353d4c121dd027efcec3a3a52 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 2 Aug 2021 12:08:15 +0100 Subject: [PATCH 17/23] . --- longs/templates/longs/mark_answer.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/longs/templates/longs/mark_answer.html b/longs/templates/longs/mark_answer.html index b0a9ce15..ecc5681a 100644 --- a/longs/templates/longs/mark_answer.html +++ b/longs/templates/longs/mark_answer.html @@ -49,8 +49,10 @@ {% else %} + {% if not unmarked %} All question answers marker. Return to marking overview {% endif %} + {% endif %} {% endblock %} \ No newline at end of file From 9d75ec8044d813fda6f1393b4047febc4b4fdada Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 2 Aug 2021 12:10:34 +0100 Subject: [PATCH 18/23] . --- longs/views.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/longs/views.py b/longs/views.py index c4b060ef..8a333db5 100755 --- a/longs/views.py +++ b/longs/views.py @@ -678,6 +678,8 @@ def mark_answer(request, pk, sk, tk): if "next" in request.POST: return redirect("longs:mark_answer", pk=pk, sk=sk, tk=next_unmarked_id) + if "save" in request.POST: + return redirect("longs:mark_answer", pk=pk, sk=sk, tk=tk) #elif "previous" in request.POST: # return redirect("longs:mark", pk=pk, sk=n - 1) From 0fee3f6579b563ee3af913dee4f5da8859e4a141 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 2 Aug 2021 12:14:42 +0100 Subject: [PATCH 19/23] . --- longs/views.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/longs/views.py b/longs/views.py index 8a333db5..7f149935 100755 --- a/longs/views.py +++ b/longs/views.py @@ -650,7 +650,7 @@ def mark_answer(request, pk, sk, tk): raise Http404("Exam question does not exist") try: - answer = question.cid_user_answers.get(cid=tk) + answer = question.cid_user_answers.get(cid=tk, exam__id=pk) except ObjectDoesNotExist: raise Http404("User answer does not exist") @@ -722,7 +722,7 @@ def mark(request, pk, sk): raise Http404("Exam question does not exist") - user_answers = question.cid_user_answers.all() + user_answers = question.cid_user_answers.filter(exam__id=pk) return render( request, @@ -764,7 +764,7 @@ def exam_scores_cid(request, pk): user_names[cid] = cid for q in questions: # Get user answer - s = q.cid_user_answers.filter(cid=cid).first() + s = q.cid_user_answers.filter(cid=cid, exam__id=pk).first() if not s: # skip if no answer, (score 4) @@ -857,7 +857,7 @@ def exam_scores_cid_user(request, pk, sk): for q in questions: # Get user answer - user_answer = q.cid_user_answers.filter(cid=cid).first() + user_answer = q.cid_user_answers.filter(cid=cid, exam__id=pk).first() From cf148a01f3de1473e7787ed29e5f240d6abb9b72 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 2 Aug 2021 12:19:13 +0100 Subject: [PATCH 20/23] . --- longs/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/longs/views.py b/longs/views.py index 7f149935..f02aa1f8 100755 --- a/longs/views.py +++ b/longs/views.py @@ -744,7 +744,7 @@ def exam_scores_cid(request, pk): questions = exam.exam_questions.all() cids = ( - CidUserAnswer.objects.filter(question__in=questions) + CidUserAnswer.objects.filter(question__in=questions, exam__id=pk) .order_by("cid") .values_list("cid", flat=True) .distinct() From 9f2adf7c9cf9b0124eca6c6afaa19f7733734b67 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 2 Aug 2021 12:26:47 +0100 Subject: [PATCH 21/23] . --- generic/views.py | 1 + 1 file changed, 1 insertion(+) diff --git a/generic/views.py b/generic/views.py index 41af8d26..5df08f93 100644 --- a/generic/views.py +++ b/generic/views.py @@ -332,6 +332,7 @@ class ExamViews(View, LoginRequiredMixin): questions = exam.exam_questions.all() + # TODO: fix showing unmarked answer count from other exams... return render( request, "{}/mark_overview.html".format(self.app_name), {"exam": exam, "questions": questions} ) From a9a2874c16f241181462666c046a8ae86eda6a2b Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 2 Aug 2021 12:29:07 +0100 Subject: [PATCH 22/23] . --- anatomy/views.py | 6 +++--- rapids/views.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/anatomy/views.py b/anatomy/views.py index 0e21b304..31353f9d 100644 --- a/anatomy/views.py +++ b/anatomy/views.py @@ -453,7 +453,7 @@ def exam_scores_cid(request, pk): questions = exam.exam_questions.all() cids = ( - CidUserAnswer.objects.filter(question__in=questions) + CidUserAnswer.objects.filter(question__in=questions, exam__id=pk) .order_by("cid") .values_list("cid", flat=True) .distinct() @@ -473,7 +473,7 @@ def exam_scores_cid(request, pk): user_names[cid] = cid for q in questions: # Get user answer - s = q.cid_user_answers.filter(cid=cid).first() + s = q.cid_user_answers.filter(cid=cid, exam__id=pk).first() if not s: # skip if no answer user_answers_marks[cid].append(0) @@ -564,7 +564,7 @@ def exam_scores_cid_user(request, pk, sk): for q in questions: # Get user answer - user_answer = q.cid_user_answers.filter(cid=cid).first() + user_answer = q.cid_user_answers.filter(cid=cid, exam__id=pk).first() if not user_answer: # skip if no answer answers_marks.append(0) diff --git a/rapids/views.py b/rapids/views.py index 7587a5b8..b0a470ed 100755 --- a/rapids/views.py +++ b/rapids/views.py @@ -787,7 +787,7 @@ def exam_scores_cid(request, pk): questions = exam.exam_questions.all() cids = ( - CidUserAnswer.objects.filter(question__in=questions) + CidUserAnswer.objects.filter(question__in=questions, exam__id=pk) .order_by("cid") .values_list("cid", flat=True) .distinct() @@ -807,7 +807,7 @@ def exam_scores_cid(request, pk): user_names[cid] = cid for q in questions: # Get user answer - s = q.cid_user_answers.filter(cid=cid).first() + s = q.cid_user_answers.filter(cid=cid, exam__id=pk).first() if not s: # skip if no answer @@ -901,7 +901,7 @@ def exam_scores_cid_user(request, pk, sk): for q in questions: # Get user answer - user_answer = q.cid_user_answers.filter(cid=cid).first() + user_answer = q.cid_user_answers.filter(cid=cid, exam__id=pk).first() if not user_answer or user_answer is None: # skip if no answer From 4910d7e1608fd15525b006113a343face70649e6 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 2 Aug 2021 16:54:44 +0100 Subject: [PATCH 23/23] . --- templates/index.html | 1 + 1 file changed, 1 insertion(+) diff --git a/templates/index.html b/templates/index.html index 768dcb88..2ed782bc 100644 --- a/templates/index.html +++ b/templates/index.html @@ -16,4 +16,5 @@ {% if request.user.is_staff %}Admin{% endif %}

A radiology resource

+

RTS is available here

{% endblock %} \ No newline at end of file