class BaseFormSet
[source]
A formset is a layer of abstraction to work with multiple forms on the same page. It can be best compared to a data grid. Let’s say you have the following form:
>>> from django import forms >>> class ArticleForm(forms.Form): ... title = forms.CharField() ... pub_date = forms.DateField()
You might want to allow the user to create several articles at once. To create a formset out of an ArticleForm
you would do:
>>> from django.forms import formset_factory >>> ArticleFormSet = formset_factory(ArticleForm)
You now have created a formset named ArticleFormSet
. The formset gives you the ability to iterate over the forms in the formset and display them as you would with a regular form:
>>> formset = ArticleFormSet() >>> for form in formset: ... print(form.as_table()) <tr><th><label for="id_form-0-title">Title:</label></th><td><input type="text" name="form-0-title" id="id_form-0-title" /></td></tr> <tr><th><label for="id_form-0-pub_date">Pub date:</label></th><td><input type="text" name="form-0-pub_date" id="id_form-0-pub_date" /></td></tr>
As you can see it only displayed one empty form. The number of empty forms that is displayed is controlled by the extra
parameter. By default, formset_factory()
defines one extra form; the following example will display two blank forms:
>>> ArticleFormSet = formset_factory(ArticleForm, extra=2)
Iterating over the formset
will render the forms in the order they were created. You can change this order by providing an alternate implementation for the __iter__()
method.
Formsets can also be indexed into, which returns the corresponding form. If you override __iter__
, you will need to also override __getitem__
to have matching behavior.
Please login to continue.