Дублирование атрибутов формы в div '.controls' при использовании виджета CheckboxSelectMultiple с Crispy Forms
У меня есть форма, предназначенная для фильтрации результатов в представлении списка. Я использую HTMX для отправки GET запроса при каждом изменении формы, и я использую Crispy Forms для рендеринга формы (включая атрибуты hx
в теге <form>
).
Я уже много раз использовал этот шаблон без проблем, но на этой конкретной форме я хочу использовать виджет CheckboxSelectMultiple
. Когда форма отображается, атрибуты hx
, которые я применяю к тегу <form>
, дублируются в теге <div class="controls">
, который содержит флажки.
Форма
class MyListFilterForm(forms.Form):
status = forms.MultipleChoiceField(choices=MyModel.STATUS_CHOICES, required=False,
widget=forms.CheckboxSelectMultiple)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_method = 'GET'
self.helper.disable_csrf = True
self.helper.attrs = {
'hx_get': reverse('myapp:my_view'),
'hx_trigger': 'change',
'hx_target': '#my_table_body',
}
Rendered HTML
<form hx-get="/path/to/view/" hx-target="#my_table_body" hx-trigger="change" method="get">
<div id="div_id_status" class="control-group">
<label for="" class="control-label ">
Status
</label>
<div class="controls" hx-get="/path/to/view/" hx-target="#my_table_body" hx-trigger="change">
<label class="checkbox" for="id_status_0"><input type="checkbox" name="status" id="id_status_0" value="1">Choice 1</label>
<label class="checkbox" for="id_status_1"><input type="checkbox" name="status" id="id_status_1" value="2">Choice 2</label>
<label class="checkbox" for="id_status_2"><input type="checkbox" name="status" id="id_status_2" value="3">Choice 3</label>
</div>
</div>
</form>
Это дублирование атрибутов hx
приводит к тому, что запрос HTMX срабатывает дважды при нажатии на один из этих флажков. Мало того, первый запрос выполняется без данных формы, что также приводит к неправильным результатам.
Если я удалю виджет CheckboxSelectMultiple
и позволю использовать виджет по умолчанию SelectMultiple
, то проблемы нет и все работает нормально, но CheckboxSelectMultiple
является желаемым виджетом для этой формы.
Я знаю, что могу отобразить форму вручную в шаблоне, или, возможно, сделать некоторую пользовательскую обработку событий HTMX, чтобы остановить первый запрос, но в идеале я хотел бы просто выяснить, как отобразить форму через Crispy Forms без получения дублирующих атрибутов.
Я использую Django 3.2.7 и Crispy Forms 1.13.0