# 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>
答案 0 :(得分:11)
当您的表单包含可变行数时,您需要的是formset。
答案 1 :(得分:0)
11 年后!!!
我想动态地向表单添加一个 -not-so-important 标志,而不需要为此任务创建一个特定的表单。这是我如何处理我的案子
class CreateFooView(generic.CreateView):
...
def get_form(self, form_class=None):
form = super().get_form(form_class=self.form_class)
...
field = forms.BooleanField(label="Add to Bar",required=False)
form.fields['add_to_bar'] = field
return form