Django-在一个表单中重复一个表单字段n次 [英] Django - Repeating a form field n times in one form

查看:113
本文介绍了Django-在一个表单中重复一个表单字段n次的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个包含多个字段的Django表单,其中一个字段需要重复n次(其中在设计时不知道n),我将如何进行编码(如果可能的话)?

I have a Django form with several fields in it one of which needs to be repeated n times (where n is not known at design time) how would I go about coding this (if it is possible at all)?

例如而不是:-

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())

我需要类似的东西: -

I need something like :-

Class PaymentsForm(forms.form):
    invoice = forms.CharField(widget=ValueHiddenInput())
    total = forms.CharField(widget=ValueHiddenInput())
    item_name[n] = forms.CharField(widget=ValueHiddenInput())

谢谢,

理查德。

Thanks,
Richard.

推荐答案

您可以在表单的 __ init __ 方法中创建重复的字段:

You can create the repeated fields in the __init__ method of your form:

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())

有关动态表单的更多信息,例如此处

More about dynamic forms can be found e.g. here

编辑:回答您评论中的问题:只需将重复次数作为 __ init __ 方法的参数即可,如下所示:

edit: to answer the question in your comment: just give the number of repetitions as an argument to the __init__ method, something like this:

    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())

,然后在您看来(或您创建表格的任何地方):

and then in your view (or wherever you create the form):

payments_form = PaymentsForm(10)

这篇关于Django-在一个表单中重复一个表单字段n次的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆