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

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

我需要这样的东西:-

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

谢谢,
理查德。

最佳答案

您可以在表单的 __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())

可以找到更多关于动态表单的信息,例如here

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

然后在您的 View 中(或您创建表单的任何地方):

payments_form = PaymentsForm(10)

关于python - Django - 以一种形式重复n次表单字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1205626/

相关文章:

python - 在Python中迭代文本文件的内容

python - DJANGO 在保存时添加 NULL - IntegrityError at/****/(1048, "***' 不能为 null")

python - Django 管理站点不显示模型的默认权限

python - Django 表格 : cannot call form. 干净

Python 导入语句和递归 - 需要模块命名空间中可用的函数

python - Jupyter 笔记本评论快捷方式不起作用

python - 如果 "null=True",存储在 DB 中,是 "NULL"还是 "empty values"?

python - 在 Django 中形成 POST 字典时,请求中的正文被忽略

Django订单选择字段

django - 密码重置 View 不发送电子邮件(Django 1.11)