可以在Django表单中添加单行吗?
我有一个表单,内容大致是这样的:
class aForm(forms.Form):
input1 = forms.CharField()
input2 = forms.CharField()
input3 = forms.CharField()
我希望在用户点击“添加另一个输入3”时,能在表单中增加一个额外的输入框input3。
我看过很多方法可以使用表单集合来添加新的表单,但我不想添加一个新的表单,我只是想增加一个新的输入框input3。
这样做可以吗?
3 个回答
0
也许可以这样做:
from django import forms
from django.utils.datastructures import SortedDict
def some_view(request):
data = {}
# Using session to remember the row count for simplicity
if not request.session.get('form_rows', None):
request.session['form_rows'] = 3
# If posted with add row button add one more row
if request.method == 'POST' and request.POST.get('rows', None):
request.session['form_rows'] += 1
data = request.POST
# Create appropriate number of form fields on the fly
fields = SortedDict()
for row in xrange(1, request.session['form_rows']):
fields['value_{0}'.format(row)] = forms.IntegerField()
# Create form class
MyForm = type('MyForm', (forms.BaseForm,), { 'base_fields': fields })
form = MyForm(initial=data)
# When submitted...
if request.method == 'POST' and not request.POST.get('rows', None):
form = MyForm(request.POST)
if form.is_valid():
# do something
return render_to_response('some_template.html', {
'form':form,
}, context_instance=RequestContext(request))
使用模板:
<form action="" method="post">
{{ form }}
<input type="submit" />
<input type="submit" value='Add' name='rows' />
</form>
这个例子有点简单,但确实能用。
你可以很容易地修改这个例子,让它使用AJAX来发送请求,然后把旧的表单替换成新的表单。
2
我建议你在表单定义中定义一个叫做 input3
的输入框,但不要把它设为必填,然后默认把它隐藏起来。用户可以通过JavaScript来显示这个输入框。
如果你想让用户可以添加不确定数量的额外输入框,我建议你进一步了解一下表单集合(formsets)。
2
要添加动态字段,可以重写初始化方法。
可以像这样做:
class aForm(forms.Form):
input1 = forms.CharField()
input2 = forms.CharField()
def __init__(self, addfields=0, *args, **kwargs):
super(aForm, self).__init__(*args, **kwargs)
#add new fields
for i in range(3,addfields+3)
self.fields['input%d' % i] = forms.CharField()