From 0f7ee7b6f14f2a5fc2eb2a8226d40368c707ff24 Mon Sep 17 00:00:00 2001 From: Ross Date: Sat, 11 Sep 2021 18:29:25 +0100 Subject: [PATCH] . --- longs/forms.py | 2 +- longs/migrations/0051_exam_double_mark.py | 18 ++++++++++++++++++ longs/models.py | 2 ++ longs/urls.py | 2 +- longs/views.py | 20 ++++++++++---------- 5 files changed, 32 insertions(+), 12 deletions(-) create mode 100644 longs/migrations/0051_exam_double_mark.py diff --git a/longs/forms.py b/longs/forms.py index bafe9c78..3445d017 100755 --- a/longs/forms.py +++ b/longs/forms.py @@ -202,4 +202,4 @@ LongSeriesImageFormSet = inlineformset_factory( class ExamForm(ModelForm): class Meta: model = Exam - fields = ["name", "time_limit", "exam_mode", "active", "archive"] \ No newline at end of file + fields = ["name", "time_limit", "exam_mode", "active", "double_mark", "archive"] \ No newline at end of file diff --git a/longs/migrations/0051_exam_double_mark.py b/longs/migrations/0051_exam_double_mark.py new file mode 100644 index 00000000..23d05db1 --- /dev/null +++ b/longs/migrations/0051_exam_double_mark.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.6 on 2021-09-11 17:25 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('longs', '0050_auto_20210911_1818'), + ] + + operations = [ + migrations.AddField( + model_name='exam', + name='double_mark', + field=models.BooleanField(default=True), + ), + ] diff --git a/longs/models.py b/longs/models.py index 01a1f35b..fa20c4e4 100644 --- a/longs/models.py +++ b/longs/models.py @@ -585,6 +585,8 @@ class Exam(ExamBase): help_text='Author of exam', related_name="long_exam_author") + double_mark = models.BooleanField(default=True, help_text="Defines if an exam is expected to be double marked") + def get_exam_question_json(self, question_id): q = get_object_or_404(Long, pk=question_id) diff --git a/longs/urls.py b/longs/urls.py index 02de70cf..999b948e 100755 --- a/longs/urls.py +++ b/longs/urls.py @@ -66,7 +66,7 @@ urlpatterns = [ views.question_review, name="question_review", ), - path("exam////mark", views.mark_answer, name="mark_answer"), + path("exam////mark", views.mark_answer, name="mark_answer"), path("exam///mark", views.mark, name="mark"), path("exam//mark", views.LongExamViews.mark_overview, name="mark_overview"), # path("exam///", views.exam_take, name="exam_take"), diff --git a/longs/views.py b/longs/views.py index cbce7b19..d60d3cfd 100755 --- a/longs/views.py +++ b/longs/views.py @@ -635,12 +635,12 @@ def loadJsonAnswer(answer): @login_required @user_is_long_marker @reversion.create_revision() -def mark_answer(request, pk, sk, cid): - exam = get_object_or_404(Exam, pk=pk) +def mark_answer(request, exam_id, question_number, cid): + exam = get_object_or_404(Exam, pk=exam_id) questions = exam.exam_questions.all() - n = sk + n = question_number question_details = { "total": len(questions), @@ -648,16 +648,16 @@ def mark_answer(request, pk, sk, cid): } try: - question = questions[sk] + question = questions[question_number] except IndexError: raise Http404("Exam question does not exist") try: - answer = question.cid_user_answers.get(cid=cid, exam__id=pk) + answer = question.cid_user_answers.get(cid=cid, exam__id=exam_id) except ObjectDoesNotExist: raise Http404("User answer does not exist") - cid_list = list(question.cid_user_answers.filter(exam__id=pk).values_list("cid", flat=True)) + cid_list = list(question.cid_user_answers.filter(exam__id=exam_id).values_list("cid", flat=True)) previous_cid = False next_cid = False @@ -686,18 +686,18 @@ def mark_answer(request, pk, sk, cid): # If skip button is pressed skip the question without marking # Skip is problematic if we skip to the next unmarked answer #if "skip" in request.POST: - # return redirect("longs:mark_answer", pk=pk, sk=sk, cid=next_unmarked_id) + # return redirect("longs:mark_answer", pk=exam_id, sk=question_number, cid=next_unmarked_id) # Extract score from form and save it to the object answer.score = form.cleaned_data["score"] answer.save() if "next" in request.POST: - return redirect("longs:mark_answer", pk=pk, sk=sk, cid=next_unmarked_id) + return redirect("longs:mark_answer", exam_id=exam_id, question_number=question_number, cid=next_unmarked_id) if "save" in request.POST: - return redirect("longs:mark_answer", pk=pk, sk=sk, cid=cid) + return redirect("longs:mark_answer", exam_id=exam_id, question_number=question_number, cid=cid) #elif "previous" in request.POST: - # return redirect("longs:mark", pk=pk, sk=n - 1) + # return redirect("longs:mark", pk=exam_id, sk=n - 1) else: form = MarkLongQuestionForm(initial={'score': answer.score})