.
This commit is contained in:
+5
-5
@@ -161,8 +161,8 @@ class AnatomyQuestion(models.Model):
|
|||||||
exams = ", ".join(e)
|
exams = ", ".join(e)
|
||||||
return exams
|
return exams
|
||||||
|
|
||||||
def get_unmarked_answer_string(self, exam_pk=None):
|
def get_unmarked_user_answer_string(self, exam_pk=None):
|
||||||
unmarked_answers = self.get_unmarked_answers(exam_pk)
|
unmarked_answers = self.get_unmarked_user_answers(exam_pk)
|
||||||
|
|
||||||
if not unmarked_answers:
|
if not unmarked_answers:
|
||||||
return "No answers to mark"
|
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:
|
if exam_pk is None:
|
||||||
user_answers = set([i.answer_compare for i in self.cid_user_answers.all()])
|
user_answers = set([i.answer_compare for i in self.cid_user_answers.all()])
|
||||||
else:
|
else:
|
||||||
@@ -187,8 +187,8 @@ class AnatomyQuestion(models.Model):
|
|||||||
|
|
||||||
return unmarked_answers
|
return unmarked_answers
|
||||||
|
|
||||||
def get_unmarked_answer_count(self, exam_pk=None):
|
def get_unmarked_user_answer_count(self, exam_pk=None):
|
||||||
return len(self.get_unmarked_answers(exam_pk))
|
return len(self.get_unmarked_user_answers(exam_pk))
|
||||||
|
|
||||||
def get_marked_answers(self):
|
def get_marked_answers(self):
|
||||||
return set(
|
return set(
|
||||||
|
|||||||
+1
-1
@@ -323,7 +323,7 @@ def mark(request, pk, sk):
|
|||||||
# i.answer.lower() for i in question.incorrect_answers.all()
|
# 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":
|
if request.method == "POST":
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -419,7 +419,7 @@ class ExamViews(View, LoginRequiredMixin):
|
|||||||
questions = exam.exam_questions.all()
|
questions = exam.exam_questions.all()
|
||||||
|
|
||||||
|
|
||||||
# Long cases require some special info
|
# Handle exams that require double marking
|
||||||
try:
|
try:
|
||||||
if exam.double_mark:
|
if exam.double_mark:
|
||||||
question_unmarked_map = []
|
question_unmarked_map = []
|
||||||
|
|||||||
+4
-4
@@ -178,13 +178,13 @@ class Long(models.Model):
|
|||||||
def get_image_url_array(self):
|
def get_image_url_array(self):
|
||||||
return json.dumps(["https://www.penracourses.org.uk{}".format(i.url) for i in self.get_images()])
|
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:
|
if exam_pk is None:
|
||||||
return self.cid_user_answers.all().count()
|
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:
|
if exam_pk is None:
|
||||||
answers = self.cid_user_answers.all()
|
answers = self.cid_user_answers.all()
|
||||||
else:
|
else:
|
||||||
@@ -195,7 +195,7 @@ class Long(models.Model):
|
|||||||
if marker is None:
|
if marker is None:
|
||||||
return unmarked_answers
|
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 = []
|
marker_unmarked = []
|
||||||
for answer in unmarked_answers:
|
for answer in unmarked_answers:
|
||||||
if answer.mark.filter(marker=marker).count() < 1:
|
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:
|
try:
|
||||||
if exam.double_mark:
|
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:
|
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
|
next_unmarked_id = unmarked[0].cid
|
||||||
if next_unmarked_id == cid:
|
if next_unmarked_id == cid:
|
||||||
next_unmarked_id = unmarked[1].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()
|
unmarked_count = user_answers.filter(score=CidUserAnswer.ScoreOptions.UNMARKED).count()
|
||||||
|
|
||||||
if exam.double_mark:
|
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(
|
return render(
|
||||||
request,
|
request,
|
||||||
"longs/mark_question_double_overview.html",
|
"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)
|
exams = ", ".join(e)
|
||||||
return exams
|
return exams
|
||||||
|
|
||||||
def get_unmarked_answer_string(self, exam_pk=None):
|
def get_unmarked_user_answer_string(self, exam_pk=None):
|
||||||
unmarked_answers = self.get_unmarked_answers(exam_pk)
|
unmarked_answers = self.get_unmarked_user_answers(exam_pk)
|
||||||
|
|
||||||
if not unmarked_answers:
|
if not unmarked_answers:
|
||||||
return "No answers to mark"
|
return "No answers to mark"
|
||||||
@@ -242,26 +242,40 @@ class Rapid(models.Model):
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_unmarked_answers(self, exam_pk=None):
|
def get_unmarked_user_answers(self, exam_pk=None, marker=None):
|
||||||
# If normal no answers to mark
|
# If normal no answers to mark (they will be automarked)
|
||||||
if self.normal:
|
if self.normal:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
if exam_pk is None:
|
if exam_pk is None:
|
||||||
user_answers = set(
|
user_answer_queryset = self.cid_user_answers.all()
|
||||||
[i.answer_compare for i in self.cid_user_answers.all() if i.normal == False]
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
user_answers = set(
|
user_answer_queryset = self.cid_user_answers.filter(exam__id=exam_pk)
|
||||||
[i.answer_compare for i in self.cid_user_answers.filter(exam__id=exam_pk) if i.normal == False]
|
|
||||||
)
|
|
||||||
|
|
||||||
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):
|
#unmarked_answers = user_answers - self.get_marked_answers()
|
||||||
return len(self.get_unmarked_answers(exam_pk))
|
|
||||||
|
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):
|
def get_user_answers(self, exam_pk=None):
|
||||||
if exam_pk is None:
|
if exam_pk is None:
|
||||||
@@ -459,6 +473,8 @@ class Exam(ExamBase):
|
|||||||
help_text='Author of exam',
|
help_text='Author of exam',
|
||||||
related_name="rapid_exam_author")
|
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):
|
def get_normal_abnormal_breakdown(self):
|
||||||
# Inefficient but more extendible
|
# 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()
|
# 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":
|
if request.method == "POST":
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user