.
This commit is contained in:
+5
-5
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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":
|
||||
|
||||
|
||||
Reference in New Issue
Block a user