This commit is contained in:
Ross
2021-10-16 11:02:42 +01:00
parent d1c1d059a5
commit 7fc9cccf03
4 changed files with 97 additions and 94 deletions
+1
View File
@@ -663,6 +663,7 @@ class CidUserAnswer(models.Model):
mark = "unmarked"
return mark
# Not used
@reversion.register
class AnswerMarks(models.Model):
score = models.CharField(
+85 -83
View File
@@ -1,88 +1,90 @@
{% extends 'rapids/exams.html' %}
{% block content %}
<h2>Marking question {{question_details.current}} of {{question_details.total}}</h2>
<a href="{% url 'rapids:question_detail' question.id %}" title="View the Question">View</a> <a
href="{% url 'rapids:rapid_update' question.id %}" title="Edit the Question">Edit</a> <a
href="{% url 'admin:rapids_rapid_change' question.id %}" title="Edit the Question using the admin interface">Admin
Edit</a>
{% if question.normal %}
<h3>This question is normal</h3>
Answers will be automatically marked.<br />
<h2>Marking question {{question_details.current}} of {{question_details.total}}{% if review %} [REVIEW]{% endif %}</h2>
<a href="{% url 'rapids:question_detail' question.id %}" title="View the Question">View</a> <a
href="{% url 'rapids:rapid_update' question.id %}" title="Edit the Question">Edit</a> <a
href="{% url 'admin:rapids_rapid_change' question.id %}" title="Edit the Question using the admin interface">Admin
Edit</a>
{% if question.normal %}
<h3>This question is normal</h3>
Answers will be automatically marked.<br />
{% if incorrect_answers %}
<p>The following answers have been submitted for this question</p>
<div class="marking-list">
<ul id="new-answer-list" class="answer-list rapid">
{% for answer in incorrect_answers %}
<li>
<pre><span class="answer incorrect" title="{{answer}}">{{ answer }}</span></pre>
</li>
{% endfor %}
</ul>
</div>
{% endif %}
{% else %}
<h3>This question is abnormal</h3>
Answers marked as normal will be automatically marked.<br />
Region: {{ question.get_regions }}, Abnormalities: {{ question.get_abnormalities }}
{% endif %}
<div id="single-dicom-viewer" class="marking-dicom" data-images="{{question.get_image_url_array}}"
data-annotations='{{question.get_image_annotations}}'>
</div>
<div class="marking">
<form method="POST" class="post-form">{% csrf_token %}
{% if not question.normal %}
Click each answer to toggle through marks awarded (as per colour)<br/>
{% if unmarked_exam_answers_only %}
Showing exam answers only <a href="{% url 'rapids:mark_all' exam.id question_number %}">(view all)</a>
{% else %}
Showing all answers <a href="{% url 'rapids:mark' exam.id question_number %}">(view unmarked exam answers)</a>
{% if incorrect_answers %}
<p>The following answers have been submitted for this question</p>
<div class="marking-list">
<ul id="new-answer-list" class="answer-list rapid">
{% for answer in incorrect_answers %}
<li>
<pre><span class="answer incorrect" title="{{answer}}">{{ answer }}</span></pre>
</li>
{% endfor %}
</ul>
</div>
{% endif %}
<div class="marking-list">
Unmarked:
<ul id="new-answer-list" class="answer-list rapid">
{% for answer in user_answers %}
<li>
<pre><span class="answer not-marked">{{ answer }}</span></pre>
</li>
{% endfor %}
</ul>
Marked:
<ul id="marked-answer-list" class="answer-list rapid">
{% for answer in correct_answers %}
<li>
<pre><span class="answer correct" title="{{answer}}">{{ answer }}</span></pre>
</li>
{% endfor %}
{% for answer in half_mark_answers %}
<li>
<pre><span class="answer half-correct" title="{{answer}}">{{ answer }}</span></pre>
</li>
{% endfor %}
{% for answer in incorrect_answers %}
<li>
<pre><span class="answer incorrect" title="{{answer}}">{{ answer }}</span></pre>
</li>
{% endfor %}
</ul>
<div class="answer-list key">Key: <span class="correct">2 Marks</span>, <span class="half-correct">1
Mark</span>, <span class="incorrect">0 Marks</span></div>
</div>
{% endif %}
{% if question_details.current > 1 %}
<button type="submit" name="previous" class="save btn btn-default">Previous</button>
{% endif %}
<button type="submit" name="save" class="save btn btn-default">Save</button>
{% if question_details.current >= question_details.total %}
{% else %}
<button type="submit" name="next" class="save btn btn-default">Next</button>
<button type="submit" name="skip" class="save btn btn-default">Skip</button>
{% endif %}
<span class=hide>
{{ form.as_p }}
</span>
</form>
</div>
{% endblock %}
{% else %}
<h3>This question is abnormal</h3>
Answers marked as normal will be automatically marked.<br />
Region: {{ question.get_regions }}, Abnormalities: {{ question.get_abnormalities }}
{% endif %}
<div id="single-dicom-viewer" class="marking-dicom" data-images="{{question.get_image_url_array}}"
data-annotations='{{question.get_image_annotations}}'>
</div>
<div class="marking">
<form method="POST" class="post-form">{% csrf_token %}
{% if not question.normal %}
Click each answer to toggle through marks awarded (as per colour)<br/>
{% if not review %}
{% if unmarked_exam_answers_only %}
Showing exam answers only <a href="{% url 'rapids:mark_all' exam.id question_number %}">(view all)</a>
{% else %}
Showing all answers <a href="{% url 'rapids:mark' exam.id question_number %}">(view unmarked exam answers)</a>
{% endif %}
{% endif %}
<div class="marking-list">
Unmarked:
<ul id="new-answer-list" class="answer-list rapid">
{% for answer in user_answers %}
<li>
<pre><span class="answer not-marked">{{ answer }}</span></pre>
</li>
{% endfor %}
</ul>
Marked:
<ul id="marked-answer-list" class="answer-list rapid">
{% for answer in correct_answers %}
<li>
<pre><span class="answer correct" title="{{answer}}">{{ answer }}</span></pre>
</li>
{% endfor %}
{% for answer in half_mark_answers %}
<li>
<pre><span class="answer half-correct" title="{{answer}}">{{ answer }}</span></pre>
</li>
{% endfor %}
{% for answer in incorrect_answers %}
<li>
<pre><span class="answer incorrect" title="{{answer}}">{{ answer }}</span></pre>
</li>
{% endfor %}
</ul>
<div class="answer-list key">Key: <span class="correct">2 Marks</span>, <span class="half-correct">1
Mark</span>, <span class="incorrect">0 Marks</span></div>
</div>
{% endif %}
{% if question_details.current > 1 %}
<button type="submit" name="previous" class="save btn btn-default">Previous</button>
{% endif %}
<button type="submit" name="save" class="save btn btn-default">Save</button>
{% if question_details.current >= question_details.total %}
{% else %}
<button type="submit" name="next" class="save btn btn-default">Next</button>
<button type="submit" name="skip" class="save btn btn-default">Skip</button>
{% endif %}
<span class=hide>
{{ form.as_p }}
</span>
</form>
</div>
{% endblock %}
+1
View File
@@ -44,6 +44,7 @@ urlpatterns = [
),
path("exam/<int:exam_pk>/<int:sk>/mark", views.mark, name="mark"),
path("exam/<int:exam_pk>/<int:sk>/mark/all", views.mark_all, name="mark_all"),
path("exam/<int:exam_pk>/<int:sk>/mark/review", views.mark_all, name="mark_review"),
path(
"exam/<int:pk>/mark", views.RapidExamViews.mark_overview, name="mark_overview"
),
+10 -11
View File
@@ -572,16 +572,23 @@ def loadJsonAnswer(answer):
return True, None
@login_required
def mark_all(request, exam_pk, sk):
return mark(request, exam_pk, sk, unmarked_exam_answers_only=False)
@login_required
def mark_review(request, exam_pk, sk):
return mark(request, exam_pk, sk, unmarked_exam_answers_only=False, review=True)
# @user_passes_test(user_is_admin, login_url="/accounts/login")
@login_required
def mark(request, exam_pk, sk, unmarked_exam_answers_only=True):
def mark(request, exam_pk, sk, unmarked_exam_answers_only=True, review=False):
exam = get_object_or_404(Exam, pk=exam_pk)
mark_url = "rapids:mark"
if not unmarked_exam_answers_only:
if review:
mark_url = "rapids:mark_review"
elif not unmarked_exam_answers_only:
mark_url = "rapids:mark_all"
questions = exam.exam_questions.all()
@@ -603,15 +610,6 @@ def mark(request, exam_pk, sk, unmarked_exam_answers_only=True):
for ans in question.answers.all():
answers_dict[ans.answer_compare] = ans
#marked_answers_set = set(answers_dict.keys())
# correct_answers = [i.answer.lower() for i in question.answers.all()]
# half_correct_answers = [
# i.answer.lower() for i in question.half_mark_answers.all()
# ]
# incorrect_answers = [
# i.answer.lower() for i in question.incorrect_answers.all()
# ]
if unmarked_exam_answers_only:
unmarked_user_answers = question.get_unmarked_user_answers(exam_pk=exam_pk)
@@ -692,6 +690,7 @@ def mark(request, exam_pk, sk, unmarked_exam_answers_only=True):
{
"exam": exam,
"form": form,
"review": review,
"question": question,
"question_number": n,
"question_details": question_details,