Sommaire

Les ensembles de formulaires (formsets)

Les formsets Django sont une couche abstraite (la classe BaseFormSet) qui permet de gérer un regroupement de formulaires identiques mais contenant des données différentes affichées dans la même page.

Imaginons que l’on souhaite créer plusieurs articles d’un seul coup (comme dans l’Admin), on va créer un formset et ainsi pouvoir gérer le groupe de formulaires de saisie/modification.

from django.forms.formsets import formset_factory  
ArticleFormSet = formset_factory(ArticleForm)

Une instance formset est itérable et chaque itération renvoie un formulaire.

formset = ArticleFormSet()  
print(len(formset))  
for form in formset:  
    print(type(form))  
  
1  
<ArticleForm Instance> 

Il existe de nombreuses analogies entre les modèles inline de l’Admin et les formset. C’est normal car l’Admin utilise les formset. Lorsque l’on crée un formset sans donnée, il ne contient qu’un seul formulaire vide dédié à la création (comme pour l’Admin, le paramètre extra contrôle le nombre de formulaires additionnels).

ArticleFormSet = formset_factory(ArticleForm, extra=2)

Si on affiche les formulaires :

print(len(formset)) 
for form in formset: 
    print(form.as_table())

...

2  
<tr><th><label for="id_form-0- 
titre">Titre:</label></th><td><input ...