Hé les gars, je sais que cette question a été soulevée de nombreuses fois, mais je ne suis pas tout à fait l'implémentation complète. Comme vous pouvez le voir ci-dessous, j'ai un formulaire que je peux dire dynamiquement combien de lignes à créer. Comment puis-je créer un lien "Ajouter une ligne" qui indique à la vue combien de lignes créer? Je voudrais vraiment le faire sans augmenter l'url ...Ajouter dynamiquement des champs à Django (et proprement)
# views.py
def myView(request):
if request.method == "POST":
form = MyForm(request.POST, num_rows=1)
if form.is_valid():
return render_to_response('myform_result.html', context_instance=RequestContext(request))
else:
form = MyForm(num_rows=1)
return render_to_response('myform.html', {'form':form}, context_instance=RequestContext(request))
# forms.py
class MyForm(forms.Form):
def __init__(self, *args, **kwargs):
num_rows = kwargs.pop('num_rows',1)
super(MyForm, self).__init__(*args, **kwargs)
for row in range(0, num_rows):
field = forms.CharField(label="Row")
self.fields[str(row)] = field
# myform.html http://example.com/myform
<form action="." method="POST" accept-charset="utf-8">
<ul>
{% for field in form %}
<li style="margin-top:.25em">
<span class="normal">{{ field.label }}</span>
{{ field }}
<span class="formError">{{ field.errors }}</span>
</li>
{% endfor %}
</ul>
<input type="submit" value="Save">
</form>
<a href="ADD_ANOTHER_ROW?">+ Add Row</a>
Génial, je savais que c'était quelque chose que je n'avais probablement jamais eu auparavant. Merci de me diriger dans la bonne direction! En plus des formsets qui fonctionnent mieux que ce que je faisais, le 'ManagementForm' est la partie que je cherchais. – Scott