Django Crispy Form цикл через объект {% crispy %}
Я пытаюсь использовать поля формы crispy внутри каждого столбца таблицы. Я могу отобразить их, используя:
{% load crispy_forms_tags %}
<tr>
<form method="get" class="form-inline justify-content-center">
{% for field in filter.form %}
<th>{{ field|as_crispy_field }}</th>
{% endfor %}
<input class='hidden-submit' type="submit"/>
</form>
</tr>
И это выглядит следующим образом, что мне и нужно:
Но проблема в том, что Layout(), который я использую для добавления дополнительных параметров, таких как заполнители и т.д. в форму, не работает, потому что я использую тег |as_crispy_field для отображения отдельных полей. Вот мой компонент формы:
class CustomFiltersForm(forms.Form):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_show_labels = False
self.helper.form_tag = False
self.helper.layout = Layout(
)
for field_name, field in self.fields.items():
self.helper.layout.append(Field(field_name, placeholder="Search " + field.label))
Есть ли способ зацикливания {% crispy filter.form %}
или альтернативный способ заполнения отдельных полей с помощью форм cripsy? Что-то вроде:
{% for field in {% crispy filter.form%} %}
...
{% endfor %}
Вы пытаетесь сделать две разные вещи, либо вы отображаете поля вручную, либо вы отображаете их через опцию компоновки в помощнике crispy form. Я бы отказался от подхода с отдельными полями и просто использовал опцию компоновки, так как тогда заполнители и множественные атрибуты, которые вы добавляете, будут видны.
Формы должны выглядеть примерно так.
class CustomFiltersForm(forms.Form):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_show_labels = False
self.helper.form_tag = False
for field_name, field in self.fields.items():
self.helper.layout.append(Column(Field(field_name, placeholder="Search " + field.label)))
self.helper.layout.append(Hidden(Submit("submit"))
Шаблон должен выглядеть примерно так:
{% load crispy_forms_tags %}
<tr>
<form method="get" class="form-inline justify-content-center">
{% crispy filter_form %}
</form>
</tr>