Python 迭代Django自定义表单

Python 迭代Django自定义表单,python,django,Python,Django,我正在尝试创建一个动态表单,其中包含不同数量的字符域。我希望能够在表单中的半任意位置随意显示它们。我的方法是创建一个iterable函数,该函数包含正确的self.fields[INDEX]。然而,当我这样做时,我确实看到了: <django.forms.fields.CharField object at 0x80bae6be0> <django.forms.fields.CharField object at 0x80bae6f98> <django.forms

我正在尝试创建一个动态表单,其中包含不同数量的字符域。我希望能够在表单中的半任意位置随意显示它们。我的方法是创建一个iterable函数,该函数包含正确的self.fields[INDEX]。然而,当我这样做时,我确实看到了:

<django.forms.fields.CharField object at 0x80bae6be0>
<django.forms.fields.CharField object at 0x80bae6f98>
<django.forms.fields.CharField object at 0x80bae6da0>
模板基本上是这样做的:

{% for x in myform.subfield %} {{ x }} {% endfor %}

您要查找的是表单的边界字段。e、 g.{{form.email} 您正在迭代字段实例(而不是包装字段实例的表单的BoundField实例),例如{form.Field.email}。 这就是为什么你会得到

从您的模板生成结果。见:

另请参见django的文档:

尝试这种肮脏的方式(请参阅下面的“我的编辑”,以获得更好的解决方案)

编辑: 刚刚发现了一种更好(不那么脏)的方法: 一个领域有一个领域

获取绑定字段(自身、表单、字段名称)

方法根据文件:

因此,在最后一行(“屈服”行)的子字段方法中,尝试以下操作:

yield self.fields[index].get_bound_field(self, index)
然后,您的模板将保持不变:

{% for x in myform.subfield %} {{ x }} {% endfor %}
而且一切都应该按照您的预期工作。

我建议使用。它们提供您要求的现成功能。
yield self.fields[index].get_bound_field(self, index)
{% for x in myform.subfield %} {{ x }} {% endfor %}