在django中动态生成带有文本框数组的表单

时间:2013-10-28 08:04:37

标签: django django-forms

如何动态生成文本框数组,以获取带有名称的多个输入文本 document_line_value[]使用django表单?,只有在不使用django表单的情况下手动生成表单代码,我才能这样做,但我想使用django表单进行验证和其他有用的东西。

from django import forms

class EditDocumentForm(forms.Form):

    def __init__(self, document_lines, *args, **kwargs):
        super(EditDocumentForm, self).__init__(*args, **kwargs)

        for document_line in document_lines:
            self.fields['document_line_value[]'] = forms.FloatField(label='value')

它只显示最后一个元素:

<input type='text' name='document_line_value[]' />

我想在表单上有几个这样的数组,它们是表中的一行:

<tr>
  <td><input type='text' name='document_line_value[]' /></td>
  <td><input type='text' name='document_line_id[]' /></td>
  <td> <input type='text' name='document_line_comment[]' /></td>
<tr>
<tr>
  <td><input type='text' name='document_line_value[]' /></td>
  <td><input type='text' name='document_line_id[]' /></td>
  <td> <input type='text' name='document_line_comment[]' /></td>
<tr>

提前谢谢。

1 个答案:

答案 0 :(得分:0)

我相信您正在寻找FormSet课程。

应该注意,field[]语法是PHP功能,通常只有PHP支持。要求在字段名称后使用[]没有技术原因。

示例:

from django import forms

class Document(forms.Form):
    line_value = forms.CharField()
    line_id = forms.IntegerField()
    line_comment = forms.CharField(widget=forms.Textarea())

DocumentFormSet = formsets.formset_factory(Document)

def your_view(request):
    formset = DocumentFormSet()