-
Incorrect
-
{{ exam_response_score_counts.0|default:0 }}
+
+ {# Incorrect (0) #}
+
+
+
Incorrect
+
{{ exam_response_score_counts.0|default:0 }} {{ exam_response_score_pcts.0|default:0 }}%
+
+
-
-
Unmarked
-
{{ exam_response_score_counts.empty|default:0 }}
+
+ {# Unmarked (empty) #}
+
+
+
Unmarked
+
{{ exam_response_score_counts.empty|default:0 }} {{ exam_response_score_pcts.empty|default:0 }}%
+
+
diff --git a/anatomy/views.py b/anatomy/views.py
index 13a3a06d..99445baa 100644
--- a/anatomy/views.py
+++ b/anatomy/views.py
@@ -308,8 +308,8 @@ def exam_review_question_summary(request, pk: int, q_index: int):
for s, c in ua_qs.values_list("score").annotate(count=Count("id")) if False else []:
pass
- # simpler: compute via values
- score_counts = {row["score"] if row["score"] is not None else "": row["count"] for row in ua_qs.values("score").annotate(count=Count("id"))}
+ # simpler: compute via values and normalise unmarked -> 'empty'
+ score_counts = {str(row["score"]) if row["score"] is not None else "empty": row["count"] for row in ua_qs.values("score").annotate(count=Count("id"))}
# top submitted answers (by answer_compare)
top_answers = list(ua_qs.values("answer_compare").annotate(count=Count("id")).order_by("-count")[:10])
@@ -322,6 +322,16 @@ def exam_review_question_summary(request, pk: int, q_index: int):
correct_count = score_counts.get("2", 0)
correct_pct = round(100.0 * correct_count / total_responses, 1) if total_responses else None
+ # compute percentage distribution for score buckets for the summary bar chart
+ score_keys = ["2", "1", "0", "empty"]
+ score_pcts = {}
+ if total_responses:
+ for k in score_keys:
+ score_pcts[k] = round(100.0 * score_counts.get(k, 0) / total_responses, 1)
+ else:
+ for k in score_keys:
+ score_pcts[k] = 0.0
+
context = {
"exam": exam,
"question": question,
@@ -329,6 +339,7 @@ def exam_review_question_summary(request, pk: int, q_index: int):
"app_name": "anatomy",
"exam_response_total": total_responses,
"exam_response_score_counts": score_counts,
+ "exam_response_score_pcts": score_pcts,
"exam_response_correct_count": correct_count,
"exam_response_correct_pct": correct_pct,
"top_answers": top_answers,
diff --git a/sbas/templates/sbas/partials/exam_review_question_fragment.html b/sbas/templates/sbas/partials/exam_review_question_fragment.html
index 5a47abfc..58ee4743 100644
--- a/sbas/templates/sbas/partials/exam_review_question_fragment.html
+++ b/sbas/templates/sbas/partials/exam_review_question_fragment.html
@@ -9,7 +9,7 @@
Answers
{% if question.a_answer %}
- -
+
-
A.
{{ question.a_answer }}
@@ -28,7 +28,7 @@
{% endif %}
{% if question.b_answer %}
-
-
+
-
B.
{{ question.b_answer }}
@@ -47,7 +47,7 @@
{% endif %}
{% if question.c_answer %}
-
-
+
-
C.
{{ question.c_answer }}
@@ -66,7 +66,7 @@
{% endif %}
{% if question.d_answer %}
-
-
+
-
D.
{{ question.d_answer }}
@@ -85,7 +85,7 @@
{% endif %}
{% if question.e_answer %}
-
-
+
-
E.
{{ question.e_answer }}
diff --git a/sbas/templates/sbas/partials/exam_review_question_summary_fragment.html b/sbas/templates/sbas/partials/exam_review_question_summary_fragment.html
index a8cff363..81790482 100644
--- a/sbas/templates/sbas/partials/exam_review_question_summary_fragment.html
+++ b/sbas/templates/sbas/partials/exam_review_question_summary_fragment.html
@@ -16,25 +16,84 @@
-
-
A
-
{{ exam_response_counts.a|default:0 }}{{ exam_response_pcts.a|default:0 }}%
+ {# Choice A #}
+
+
+
A
+
+ {{ exam_response_counts.a|default:0 }}
+ {{ exam_response_pcts.a|default:0 }}%
+
+
+
-
-
B
-
{{ exam_response_counts.b|default:0 }}{{ exam_response_pcts.b|default:0 }}%
+
+ {# Choice B #}
+
+
+
B
+
+ {{ exam_response_counts.b|default:0 }}
+ {{ exam_response_pcts.b|default:0 }}%
+
+
+
-
-
C
-
{{ exam_response_counts.c|default:0 }}{{ exam_response_pcts.c|default:0 }}%
+
+ {# Choice C #}
+
+
+
C
+
+ {{ exam_response_counts.c|default:0 }}
+ {{ exam_response_pcts.c|default:0 }}%
+
+
+
-
-
D
-
{{ exam_response_counts.d|default:0 }}{{ exam_response_pcts.d|default:0 }}%
+
+ {# Choice D #}
+
+
+
D
+
+ {{ exam_response_counts.d|default:0 }}
+ {{ exam_response_pcts.d|default:0 }}%
+
+
+
-
-
E
-
{{ exam_response_counts.e|default:0 }}{{ exam_response_pcts.e|default:0 }}%
+
+ {# Choice E #}
+
+
+
E
+
+ {{ exam_response_counts.e|default:0 }}
+ {{ exam_response_pcts.e|default:0 }}%
+
+
+
{% else %}