diff --git a/generic/forms.py b/generic/forms.py index 1c95620d..613ca8a8 100755 --- a/generic/forms.py +++ b/generic/forms.py @@ -828,10 +828,11 @@ class UserAutocomplete(ModelAutocomplete): search_attrs = ["first_name", "last_name", "username"] class UsersAutocompleteForm(Form): - users = ModelChoiceField(queryset=User.objects.all(), widget=AutocompleteWidget( - ac_class=UserAutocomplete, options={"multiselect": True} - - )) + # Use a ModelMultipleChoiceField so the widget's multiselect option maps to a multi-value field + users = ModelMultipleChoiceField( + queryset=User.objects.all(), + widget=AutocompleteWidget(ac_class=UserAutocomplete, options={"multiselect": True}), + ) autocomplete_register(UserAutocomplete) diff --git a/generic/templates/generic/user_form_fixed.html b/generic/templates/generic/user_form_fixed.html new file mode 100644 index 00000000..012d988c --- /dev/null +++ b/generic/templates/generic/user_form_fixed.html @@ -0,0 +1,21 @@ +{% load crispy_forms_tags %} + +{{ form.media }} +
+ + diff --git a/generic/views.py b/generic/views.py index 2bba6213..f1ea4cfe 100644 --- a/generic/views.py +++ b/generic/views.py @@ -5165,9 +5165,10 @@ def exam_collection_add_author(request, collection_id): if request.method != "POST": form = UsersAutocompleteForm() + # Render the fixed form which properly includes form data in HTMX POSTs return render( request, - "generic/user_form.html", + "generic/user_form_fixed.html", {"form": form, "collection_id": collection_id}, ) return