From ad5e7aeed8aee002d20d179ecdb579473d353751 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 8 Dec 2025 12:17:16 +0000 Subject: [PATCH] . --- .../generic/examcollection_base.html | 38 ++++----- .../generic/examcollection_form.html | 85 +++++++++++++++++-- .../partials/user_search_widget_results.html | 2 +- generic/widgets.py | 14 ++- 4 files changed, 110 insertions(+), 29 deletions(-) diff --git a/generic/templates/generic/examcollection_base.html b/generic/templates/generic/examcollection_base.html index 83abb4ac..d74bd836 100644 --- a/generic/templates/generic/examcollection_base.html +++ b/generic/templates/generic/examcollection_base.html @@ -6,25 +6,25 @@ {% endblock %} {% block navigation %} - + {% endblock %} \ No newline at end of file diff --git a/generic/templates/generic/examcollection_form.html b/generic/templates/generic/examcollection_form.html index 0f7f274f..0977d16e 100755 --- a/generic/templates/generic/examcollection_form.html +++ b/generic/templates/generic/examcollection_form.html @@ -18,9 +18,84 @@

Edit Exam Collection {{object.name}}

-
- {% csrf_token %} - {{ form|crispy }} - -
+
+
+

Edit Exam Collection {{ object.name }}

+ +
+ {% csrf_token %} + {% if form.non_field_errors %} +
{{ form.non_field_errors }}
+ {% endif %} + + + +
+ {{ form|crispy }} +
+ + + +
+ + Back to collections + +
+
+
+
+ {% endblock %} \ No newline at end of file diff --git a/generic/templates/generic/partials/user_search_widget_results.html b/generic/templates/generic/partials/user_search_widget_results.html index e734b723..898cd9f7 100644 --- a/generic/templates/generic/partials/user_search_widget_results.html +++ b/generic/templates/generic/partials/user_search_widget_results.html @@ -5,7 +5,7 @@
{{ item.text|escape }} {% if item.grade %} - {{ item.grade|escape }} + {{ item.grade|escape }} {% endif %}
diff --git a/generic/widgets.py b/generic/widgets.py index cb4015fc..ee2d7eba 100644 --- a/generic/widgets.py +++ b/generic/widgets.py @@ -43,13 +43,19 @@ class UserSearchSelectMultipleWidget: except Exception: grade_text = "" + # Build the selected item HTML incrementally to avoid accidental + # mixing of boolean values into string concatenation (was causing + # a TypeError in some environments). selected_html += ( f'
  • ' f'{u.get_full_name() or u.username} {u.email}' - + (f' {grade_text}' if grade_text else '') - + '' + ) + if grade_text: + selected_html += f' {grade_text}' + selected_html += ( + '' f'' - f'
  • ' + '' ) url = reverse("generic:user_search_widget") @@ -194,7 +200,7 @@ class UserSearchSelectMultipleWidget: li.className = 'list-group-item d-flex justify-content-between align-items-center'; li.id = 'selected_user_' + fieldName + '_' + id; const span = document.createElement('span'); - span.innerHTML = text + (grade ? ' ' + grade + '' : ''); + span.innerHTML = text + (grade ? ' ' + grade + '' : ''); const btn = document.createElement('button'); btn.type = 'button'; btn.className = 'btn btn-sm btn-outline-danger ms-2'; btn.innerText = 'Remove'; btn.addEventListener('click', function() {{ removeUserFromField(fieldName, id); }}); li.appendChild(span); li.appendChild(btn);