This commit is contained in:
Ross
2021-10-16 08:36:06 +01:00
parent e3da6ac9b2
commit 26910f66c3
8 changed files with 63 additions and 29 deletions
+5 -5
View File
@@ -161,8 +161,8 @@ class AnatomyQuestion(models.Model):
exams = ", ".join(e)
return exams
def get_unmarked_answer_string(self, exam_pk=None):
unmarked_answers = self.get_unmarked_answers(exam_pk)
def get_unmarked_user_answer_string(self, exam_pk=None):
unmarked_answers = self.get_unmarked_user_answers(exam_pk)
if not unmarked_answers:
return "No answers to mark"
@@ -172,7 +172,7 @@ class AnatomyQuestion(models.Model):
)
)
def get_unmarked_answers(self, exam_pk=None):
def get_unmarked_user_answers(self, exam_pk=None):
if exam_pk is None:
user_answers = set([i.answer_compare for i in self.cid_user_answers.all()])
else:
@@ -187,8 +187,8 @@ class AnatomyQuestion(models.Model):
return unmarked_answers
def get_unmarked_answer_count(self, exam_pk=None):
return len(self.get_unmarked_answers(exam_pk))
def get_unmarked_user_answer_count(self, exam_pk=None):
return len(self.get_unmarked_user_answers(exam_pk))
def get_marked_answers(self):
return set(
+1 -1
View File
@@ -323,7 +323,7 @@ def mark(request, pk, sk):
# i.answer.lower() for i in question.incorrect_answers.all()
# ]
unmarked_user_answers = question.get_unmarked_answers()
unmarked_user_answers = question.get_unmarked_user_answers()
if request.method == "POST":
+1 -1
View File
@@ -419,7 +419,7 @@ class ExamViews(View, LoginRequiredMixin):
questions = exam.exam_questions.all()
# Long cases require some special info
# Handle exams that require double marking
try:
if exam.double_mark:
question_unmarked_map = []
+4 -4
View File
@@ -178,13 +178,13 @@ class Long(models.Model):
def get_image_url_array(self):
return json.dumps(["https://www.penracourses.org.uk{}".format(i.url) for i in self.get_images()])
def get_unmarked_answer_count(self, exam_pk=None, marker=None):
def get_unmarked_user_answer_count(self, exam_pk=None, marker=None):
if exam_pk is None:
return self.cid_user_answers.all().count()
return len(self.get_unmarked_answers(exam_pk=exam_pk, marker=marker))
return len(self.get_unmarked_user_answers(exam_pk=exam_pk, marker=marker))
def get_unmarked_answers(self, exam_pk=None, marker=None):
def get_unmarked_user_answers(self, exam_pk=None, marker=None):
if exam_pk is None:
answers = self.cid_user_answers.all()
else:
@@ -195,7 +195,7 @@ class Long(models.Model):
if marker is None:
return unmarked_answers
# If marker is specified we check for what they have marker
# If marker is specified we check for what they have marked
marker_unmarked = []
for answer in unmarked_answers:
if answer.mark.filter(marker=marker).count() < 1:
+3 -3
View File
@@ -678,9 +678,9 @@ def mark_answer(request, exam_id, question_number, cid, override=False):
try:
if exam.double_mark:
unmarked = question.get_unmarked_answers(exam_pk=exam.id, marker=request.user)
unmarked = question.get_unmarked_user_answers(exam_pk=exam.id, marker=request.user)
else:
unmarked = question.get_unmarked_answers(exam_pk=exam.id)
unmarked = question.get_unmarked_user_answers(exam_pk=exam.id)
next_unmarked_id = unmarked[0].cid
if next_unmarked_id == cid:
next_unmarked_id = unmarked[1].cid
@@ -809,7 +809,7 @@ def mark_question_overview(request, exam_id, sk):
unmarked_count = user_answers.filter(score=CidUserAnswer.ScoreOptions.UNMARKED).count()
if exam.double_mark:
marker_unmarked_count = question.get_unmarked_answer_count(exam.pk, marker=request.user)
marker_unmarked_count = question.get_unmarked_user_answer_count(exam.pk, marker=request.user)
return render(
request,
"longs/mark_question_double_overview.html",
@@ -0,0 +1,18 @@
# Generated by Django 3.2.8 on 2021-10-16 07:34
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('rapids', '0031_delete_note'),
]
operations = [
migrations.AddField(
model_name='exam',
name='double_mark',
field=models.BooleanField(default=False, help_text='If the exam requires double marking'),
),
]
+30 -14
View File
@@ -231,8 +231,8 @@ class Rapid(models.Model):
exams = ", ".join(e)
return exams
def get_unmarked_answer_string(self, exam_pk=None):
unmarked_answers = self.get_unmarked_answers(exam_pk)
def get_unmarked_user_answer_string(self, exam_pk=None):
unmarked_answers = self.get_unmarked_user_answers(exam_pk)
if not unmarked_answers:
return "No answers to mark"
@@ -242,26 +242,40 @@ class Rapid(models.Model):
)
)
def get_unmarked_answers(self, exam_pk=None):
# If normal no answers to mark
def get_unmarked_user_answers(self, exam_pk=None, marker=None):
# If normal no answers to mark (they will be automarked)
if self.normal:
return []
if exam_pk is None:
user_answers = set(
[i.answer_compare for i in self.cid_user_answers.all() if i.normal == False]
)
user_answer_queryset = self.cid_user_answers.all()
else:
user_answers = set(
[i.answer_compare for i in self.cid_user_answers.filter(exam__id=exam_pk) if i.normal == False]
)
user_answer_queryset = self.cid_user_answers.filter(exam__id=exam_pk)
unmarked_answers = user_answers - self.get_marked_answers()
marked_answers = self.get_marked_answers()
return unmarked_answers
unmarked_answers = set(
[i for i in user_answer_queryset if i.normal == False and i not in marked_answers]
)
def get_unmarked_answer_count(self, exam_pk=None):
return len(self.get_unmarked_answers(exam_pk))
#unmarked_answers = user_answers - self.get_marked_answers()
if marker is None:
return [i.answer_compare for i in unmarked_answers]
# If marker is specified we check for what they have marked
marker_unmarked = []
for answer in unmarked_answers:
if answer.mark.filter(marker=marker).count() < 1:
marker_unmarked.append(answer)
return marker_unmarked
def get_unmarked_user_answer_count(self, exam_pk=None, marker=None):
if exam_pk is None:
return self.cid_user_answers.all().count()
return len(self.get_unmarked_user_answers(exam_pk, marker=marker))
def get_user_answers(self, exam_pk=None):
if exam_pk is None:
@@ -459,6 +473,8 @@ class Exam(ExamBase):
help_text='Author of exam',
related_name="rapid_exam_author")
double_mark = models.BooleanField(default=False, help_text="If the exam requires double marking")
def get_normal_abnormal_breakdown(self):
# Inefficient but more extendible
+1 -1
View File
@@ -606,7 +606,7 @@ def mark(request, pk, sk):
# i.answer.lower() for i in question.incorrect_answers.all()
# ]
unmarked_user_answers = question.get_unmarked_answers()
unmarked_user_answers = question.get_unmarked_user_answers()
if request.method == "POST":