7

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.

2 Answers 2

9

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 %}
Sign up to request clarification or add additional context in comments.

1 Comment

Was going crazy just to realize I had the wrong formset factory helper. Good answer!
5

Use the template attribute on the helper (documented here): helper.template = 'bootstrap/table_inline_formset.html'

1 Comment

use helper.template = 'bootstrap4/table_inline_formset.html' if you are using bootstrap4.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.