Enhance exam review display to show correct answers and update result color descriptions for clarity
This commit is contained in:
@@ -9,7 +9,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p class="text-muted small">Colour indicates likely attention needed: green (good), yellow (check), red (needs attention). Hover for details.</p>
|
<p class="text-muted small">Colour indicates question results (for exam): green (good), yellow (check), red (needs attention). Hover for details.</p>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
{% for qs in question_summaries %}
|
{% for qs in question_summaries %}
|
||||||
@@ -22,6 +22,9 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p class="card-text small text-muted mb-2">Responses: {{ qs.total_responses }}{% if qs.top_answer %} — top: "{{ qs.top_answer }}"{% endif %}</p>
|
<p class="card-text small text-muted mb-2">Responses: {{ qs.total_responses }}{% if qs.top_answer %} — top: "{{ qs.top_answer }}"{% endif %}</p>
|
||||||
|
{% if qs.correct_answer %}
|
||||||
|
<p class="card-text small mb-2"><strong>Correct:</strong> <span class="text-success">{{ qs.correct_answer|safe }}</span></p>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<div class="d-flex gap-2">
|
<div class="d-flex gap-2">
|
||||||
<a class="btn btn-sm btn-outline-primary" href="{% url app_name|add:':exam_review_question' exam.pk qs.q_index %}">Review</a>
|
<a class="btn btn-sm btn-outline-primary" href="{% url app_name|add:':exam_review_question' exam.pk qs.q_index %}">Review</a>
|
||||||
|
|||||||
@@ -1291,6 +1291,31 @@ class ExamViews(View, LoginRequiredMixin):
|
|||||||
pct_val = pcts.get(k, 0.0) if isinstance(pcts, dict) else 0.0
|
pct_val = pcts.get(k, 0.0) if isinstance(pcts, dict) else 0.0
|
||||||
breakdown.append((k, v, pct_val))
|
breakdown.append((k, v, pct_val))
|
||||||
|
|
||||||
|
# Determine the canonical correct answer representation for display.
|
||||||
|
correct_answer = None
|
||||||
|
try:
|
||||||
|
if self.app_name == "sbas":
|
||||||
|
correct_answer = q.get_correct_answer()
|
||||||
|
elif self.app_name == "physics":
|
||||||
|
correct_answer = q.get_answers()
|
||||||
|
else:
|
||||||
|
# get_primary_answer is used elsewhere as the generic primary answer
|
||||||
|
try:
|
||||||
|
correct_answer = q.get_primary_answer()
|
||||||
|
except Exception:
|
||||||
|
correct_answer = getattr(q, "best_answer", None)
|
||||||
|
|
||||||
|
# Normalise iterable answers into a readable string
|
||||||
|
if isinstance(correct_answer, (list, tuple)):
|
||||||
|
try:
|
||||||
|
correct_answer = ", ".join([str(x) for x in correct_answer])
|
||||||
|
except Exception:
|
||||||
|
correct_answer = str(correct_answer)
|
||||||
|
elif correct_answer is not None:
|
||||||
|
correct_answer = str(correct_answer)
|
||||||
|
except Exception:
|
||||||
|
correct_answer = None
|
||||||
|
|
||||||
question_summaries.append(
|
question_summaries.append(
|
||||||
{
|
{
|
||||||
"question": q,
|
"question": q,
|
||||||
@@ -1299,6 +1324,7 @@ class ExamViews(View, LoginRequiredMixin):
|
|||||||
"counts": counts,
|
"counts": counts,
|
||||||
"pcts": pcts,
|
"pcts": pcts,
|
||||||
"correct_pct": correct_pct,
|
"correct_pct": correct_pct,
|
||||||
|
"correct_answer": correct_answer,
|
||||||
"answered_pct": answered_pct,
|
"answered_pct": answered_pct,
|
||||||
"colour": colour,
|
"colour": colour,
|
||||||
"top_answer": top_answer,
|
"top_answer": top_answer,
|
||||||
|
|||||||
Reference in New Issue
Block a user