I want to display a list of instances as a formset
with django-crispy-forms
and bootstrap
where each instance appears as a row with all of the fields arranged horizontally.
All of the examples I can find seem to render the instances with their fields laid out vertically.
I thought using:
helper.form_class = 'form-horizontal'
might work, but that seems to have no effect.
This is the post that got me to a solution, and I'm providing a fuller explanation here for those just getting started with crispy forms
Forms:
from crispy_forms.helper import FormHelper, Layout
...
class MyForm(forms.ModelForm):
class Meta:
model = MyModel
fields = ['field1', 'field2', 'field3']
MyFormSet = modelformset_factory(MyModel, form=MyForm, extra=0)
class MyFormSetHelper(FormHelper):
def __init__(self, *args, **kwargs):
super(MyFormSetHelper, self).__init__(*args, **kwargs)
self.layout = Layout(
'field1',
'field2',
'field3'
)
self.template = 'bootstrap/table_inline_formset.html'
Views:
formset = MyFormSet(queryset=my_qs)
helper = MyFormSetHelper()
context = {'formset': formset, 'helper': helper}
return render(request, 'my_template.html', context)
Template:
{% extends "base.html" %}
{% load crispy_forms_tags %}
{% block content %}
<form action="" method="post">
{% csrf_token %}
{% crispy formset helper %}
</form>
{% endblock content %}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With