Django - 在一个表单中重复n次字段
我有一个Django表单,里面有几个字段,其中有一个字段需要重复n次(n的值在设计时并不知道),我该怎么编码实现这个功能呢?
比如说,我不想要这样的:
Class PaymentsForm(forms.form):
invoice = forms.CharField(widget=ValueHiddenInput())
total = forms.CharField(widget=ValueHiddenInput())
item_name_1 = forms.CharField(widget=ValueHiddenInput())
item_name_2 = forms.CharField(widget=ValueHiddenInput())
.
.
.
item_name_n = forms.CharField(widget=ValueHiddenInput())
我想要这样的:
Class PaymentsForm(forms.form):
invoice = forms.CharField(widget=ValueHiddenInput())
total = forms.CharField(widget=ValueHiddenInput())
item_name[n] = forms.CharField(widget=ValueHiddenInput())
谢谢,
Richard.
2 个回答
4
使用表单集合。
10
你可以在表单的 __init__
方法里创建重复的字段:
class PaymentsForm(forms.Form):
invoice = forms.CharField(widget=forms.HiddenInput())
total = forms.CharField(widget=forms.HiddenInput())
def __init__(self, *args, **kwargs):
super(PaymentsForm, self).__init__(*args, **kwargs)
for i in xrange(10):
self.fields['item_name_%d' % i] = forms.CharField(widget=forms.HiddenInput())
关于动态表单的更多信息可以在这里找到,比如 这里
补充一下,针对你评论中的问题:只需将重复的次数作为参数传递给 __init__
方法,像这样:
def __init__(self, repetitions, *args, **kwargs):
super(PaymentsForm, self).__init__(*args, **kwargs)
for i in xrange(repetitions):
self.fields['item_name_%d' % i] = forms.CharField(widget=forms.HiddenInput())
然后在你的视图(或者你创建表单的地方):
payments_form = PaymentsForm(10)