This commit is contained in:
Ross
2021-09-08 18:53:41 +01:00
parent afc2746a70
commit 54ff4490d9
8 changed files with 65 additions and 35 deletions
+11 -5
View File
@@ -157,8 +157,8 @@ class AnatomyQuestion(models.Model):
exams = ", ".join(e) exams = ", ".join(e)
return exams return exams
def get_unmarked_answer_string(self): def get_unmarked_answer_string(self, exam_pk=None):
unmarked_answers = self.get_unmarked_answers() unmarked_answers = self.get_unmarked_answers(exam_pk)
if not unmarked_answers: if not unmarked_answers:
return "No answers to mark" return "No answers to mark"
@@ -168,16 +168,22 @@ class AnatomyQuestion(models.Model):
) )
) )
def get_unmarked_answers(self): def get_unmarked_answers(self, exam_pk=None):
if exam_pk is None:
user_answers = set( user_answers = set(
[i.answer_compare for i in self.cid_user_answers.all()] [i.answer_compare for i in self.cid_user_answers.all()]
) )
else:
user_answers = set(
[i.answer_compare for i in self.cid_user_answers.filter(exam__id=exam_pk)]
)
unmarked_answers = user_answers - self.get_marked_answers() unmarked_answers = user_answers - self.get_marked_answers()
return unmarked_answers return unmarked_answers
def get_unmarked_answer_count(self): def get_unmarked_answer_count(self, exam_pk=None):
return len(self.get_unmarked_answers()) return len(self.get_unmarked_answers(exam_pk))
def get_marked_answers(self): def get_marked_answers(self):
return set( return set(
+1
View File
@@ -708,4 +708,5 @@ input {
.sticky-alert { .sticky-alert {
position: sticky; position: sticky;
top: 5px;
} }
+3 -3
View File
@@ -11,9 +11,9 @@
<div id="stark-marking-button"><a href="{% url 'anatomy:mark' pk=exam.pk sk=0 %}"><button>Click here to start marking</button></a></div> <div id="stark-marking-button"><a href="{% url 'anatomy:mark' pk=exam.pk sk=0 %}"><button>Click here to start marking</button></a></div>
<ul id="question-mark-list"> <ul id="question-mark-list">
{% for question in questions.all %} {% for question, unmarked_count in question_unmarked_map %}
<li data-markcount={{question.get_unmarked_answer_count}}><a href="{% url 'anatomy:mark' pk=exam.pk sk=forloop.counter0 %}">Question {{forloop.counter }}: <li data-markcount={{unmarked_count}}><a href="{% url 'anatomy:mark' pk=exam.pk sk=forloop.counter0 %}">Question {{forloop.counter }}:
{{ question }}</a><br /> {{ question.get_unmarked_answer_string }}</li> {{ question }}</a><br /> {{ unmarked_count }}</li>
{% endfor %} {% endfor %}
</ul> </ul>
</div> </div>
+5 -1
View File
@@ -367,9 +367,13 @@ class ExamViews(View, LoginRequiredMixin):
questions = exam.exam_questions.all() questions = exam.exam_questions.all()
question_unmarked_map = []
for q in questions:
question_unmarked_map.append((q, q.get_unmarked_answer_count()))
# TODO: fix showing unmarked answer count from other exams... # TODO: fix showing unmarked answer count from other exams...
return render( return render(
request, "{}/mark_overview.html".format(self.app_name), {"exam": exam, "questions": questions} request, "{}/mark_overview.html".format(self.app_name), {"exam": exam, "question_unmarked_map": question_unmarked_map}
) )
@method_decorator(login_required) @method_decorator(login_required)
+10 -2
View File
@@ -175,12 +175,20 @@ 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): def get_unmarked_answer_count(self, exam_pk=None):
if exam_pk is None:
answers = self.cid_user_answers.all() answers = self.cid_user_answers.all()
else:
answers = self.cid_user_answers.filter(exam__id=exam_pk)
return len([ans for ans in answers if not ans.is_marked()]) return len([ans for ans in answers if not ans.is_marked()])
def get_unmarked_answers(self): def get_unmarked_answers(self, exam_pk=None):
if exam_pk is None:
answers = self.cid_user_answers.all() answers = self.cid_user_answers.all()
else:
answers = self.cid_user_answers.filter(exam__id=exam_pk)
return [ans for ans in answers if not ans.is_marked()] return [ans for ans in answers if not ans.is_marked()]
def get_question_json(self, based=True): def get_question_json(self, based=True):
+4 -4
View File
@@ -11,11 +11,11 @@
<div id="stark-marking-button"><a href="{% url 'longs:mark' pk=exam.pk sk=0 %}"><button>Click here to start marking</button></a></div> <div id="stark-marking-button"><a href="{% url 'longs:mark' pk=exam.pk sk=0 %}"><button>Click here to start marking</button></a></div>
<ul id="question-mark-list"> <ul id="question-mark-list">
{% for question in questions.all %} {% for question, unmarked_count in question_unmarked_map %}
<li data-markcount={{question.get_unmarked_answer_count}} <li data-markcount={{unmarked_count}}
{% if question.get_unmarked_answer_count %}class="unmarked" {% endif %} {% if unmarked_count %}class="unmarked" {% endif %}
><a href="{% url 'longs:mark' pk=exam.pk sk=forloop.counter0 %}">Question {{forloop.counter }}: ><a href="{% url 'longs:mark' pk=exam.pk sk=forloop.counter0 %}">Question {{forloop.counter }}:
{{ question }}</a><br /> Answers to mark: {{question.get_unmarked_answer_count}}</li> {{ question }}</a><br /> Answers to mark: {{unmarked_count}}</li>
{% endfor %} {% endfor %}
</ul> </ul>
</div> </div>
+17 -6
View File
@@ -231,8 +231,8 @@ class Rapid(models.Model):
exams = ", ".join(e) exams = ", ".join(e)
return exams return exams
def get_unmarked_answer_string(self): def get_unmarked_answer_string(self, exam_pk=None):
unmarked_answers = self.get_unmarked_answers() unmarked_answers = self.get_unmarked_answers(exam_pk)
if not unmarked_answers: if not unmarked_answers:
return "No answers to mark" return "No answers to mark"
@@ -242,25 +242,36 @@ class Rapid(models.Model):
) )
) )
def get_unmarked_answers(self): def get_unmarked_answers(self, exam_pk=None):
# If normal no answers to mark # If normal no answers to mark
if self.normal: if self.normal:
return [] return []
if exam_pk is None:
user_answers = set( user_answers = set(
[i.answer_compare for i in self.cid_user_answers.all() if i.normal == False] [i.answer_compare for i in self.cid_user_answers.all() if i.normal == False]
) )
else:
user_answers = set(
[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() unmarked_answers = user_answers - self.get_marked_answers()
return unmarked_answers return unmarked_answers
def get_unmarked_answer_count(self): def get_unmarked_answer_count(self, exam_pk=None):
return len(self.get_unmarked_answers()) return len(self.get_unmarked_answers(exam_pk))
def get_user_answers(self): def get_user_answers(self, exam_pk=None):
if exam_pk is None:
user_answers = set( user_answers = set(
[i.answer_compare for i in self.cid_user_answers.all()] [i.answer_compare for i in self.cid_user_answers.all()]
) )
else:
user_answers = set(
[i.answer_compare for i in self.cid_user_answers.filter(exam__id=exam_pk)]
)
return user_answers return user_answers
+3 -3
View File
@@ -11,9 +11,9 @@
<div id="stark-marking-button"><a href="{% url 'rapids:mark' pk=exam.pk sk=0 %}"><button>Click here to start marking</button></a></div> <div id="stark-marking-button"><a href="{% url 'rapids:mark' pk=exam.pk sk=0 %}"><button>Click here to start marking</button></a></div>
<ul id="question-mark-list"> <ul id="question-mark-list">
{% for question in questions.all %} {% for question, unmarked_count in question_unmarked_map %}
<li data-markcount={{question.get_unmarked_answer_count}}><a href="{% url 'rapids:mark' pk=exam.pk sk=forloop.counter0 %}">Question {{forloop.counter }}: <li data-markcount={{unmarked_count}}><a href="{% url 'rapids:mark' pk=exam.pk sk=forloop.counter0 %}">Question {{forloop.counter }}:
{{ question }}</a><br /> {{ question.get_unmarked_answer_string }}</li> {{ question }}</a><br /> {{unmarked_count}}</li>
{% endfor %} {% endfor %}
</ul> </ul>
</div> </div>