Django - 以一种形式重复表单字段n次

Fro*_*kys 5 python django django-forms

我有一个带有几个字段的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())
Run Code Online (Sandbox Code Playgroud)

我需要这样的东西: -

Class PaymentsForm(forms.form):
    invoice = forms.CharField(widget=ValueHiddenInput())
    total = forms.CharField(widget=ValueHiddenInput())
    item_name[n] = forms.CharField(widget=ValueHiddenInput())
Run Code Online (Sandbox Code Playgroud)

谢谢,
理查德.

Ben*_*end 8

您可以在__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())
Run Code Online (Sandbox Code Playgroud)

有关动态表单的更多信息可以在这里找到

编辑:回答你评论中的问题:只需将重复次数作为__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())
Run Code Online (Sandbox Code Playgroud)

然后在您的视图中(或在您创建表单的任何位置):

payments_form = PaymentsForm(10)
Run Code Online (Sandbox Code Playgroud)