Django Formsets avec des données initialisées et unifiées


Exemple

Formset est un moyen de rendre plusieurs formulaires dans une page, comme une grille de données. Ex: Ce ChoiceForm peut être associé à une question de tri. comme, les enfants sont les plus intelligents entre quel âge?

appname/forms.py

from django import forms
class ChoiceForm(forms.Form):
    choice = forms.CharField()
    pub_date = forms.DateField()

Dans vos vues, vous pouvez utiliser le constructeur formset_factory qui prend prendre Form comme paramètre, son ChoiceForm dans ce cas et extra qui décrit combien de formulaires supplémentaires autres que la forme / les formulaires initialisés doivent être rendus et vous pouvez formset objet formset comme n'importe quel autre itérable.

Si le formset n'est pas initialisé avec des données, il imprime le nombre de formulaires égal à extra + 1 et si le formset est initialisé, il imprime initialized + extra lorsque extra nombre de formulaires vides autres que ceux initialisés est supérieur.

appname/views.py

import datetime
from django.forms import formset_factory
from appname.forms import ChoiceForm
    ChoiceFormSet = formset_factory(ChoiceForm, extra=2)
    formset = ChoiceFormSet(initial=[
      {'choice': 'Between 5-15 ?',
        'pub_date': datetime.date.today(),}
      ])

si vous formset object sur un formset object comme celui-ci pour formulaire dans formset: print (form.as_table ())

Output in rendered template

<tr>
<th><label for="id_form-0-choice">Choice:</label></th>
<td><input type="text" name="form-0-choice" value="Between 5-15 ?" id="id_form-0-choice" /></td>
</tr>
<tr>
<th><label for="id_form-0-pub_date">Pub date:</label></th>
<td><input type="text" name="form-0-pub_date" value="2008-05-12" id="id_form-0-pub_date" /></td>
</tr>
<tr>
<th><label for="id_form-1-choice">Choice:</label></th>
<td><input type="text" name="form-1-choice" id="id_form-1-choice" /></td>
</tr>
<tr>
<th><label for="id_form-1-pub_date">Pub date:</label></th>
<td><input type="text" name="form-1-pub_date" id="id_form-1-pub_date" /></td
</tr>
<tr>
<th><label for="id_form-2-choice">Choice:</label></th>
<td><input type="text" name="form-2-choice" id="id_form-2-choice" /></td>
</tr>
<tr>
<th><label for="id_form-2-pub_date">Pub date:</label></th>
<td><input type="text" name="form-2-pub_date" id="id_form-2-pub_date" /></td>
</tr>