迭代Django自定义表单

2024-10-16 20:52:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个动态表单,其中包含不同数量的CharFields。我希望能够以我的形式在半任意的地方随意显示它们。我的方法是创建一个iterable函数,将自身字段[索引]。然而,当我这样做的时候,我真的看到了:

<django.forms.fields.CharField object at 0x80bae6be0>
<django.forms.fields.CharField object at 0x80bae6f98>
<django.forms.fields.CharField object at 0x80bae6da0>

如何使CharField()按预期呈现?在

我的代码如下:

^{pr2}$

模板基本上是这样做的:

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

Tags: django方法函数表单fields数量object地方
1条回答
网友
1楼 · 发布于 2024-10-16 20:52:40

您要查找的是窗体的边界字段。e、 g.{表单.电子邮件}} 您正在迭代字段实例(不是包装字段实例的窗体的BoundField实例),例如{表单域电子邮件}}. 这就是为什么你得到

<django.forms.fields.CharField object at 0x80bae6da0>

来自模板的结果。参见:https://stackoverflow.com/a/671305/3035260

另请参阅django的文档:https://docs.djangoproject.com/en/1.10/ref/forms/api/#django.forms.BoundField

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

{# Iterate over your list of field instances #}
{% for x in myform.subfield %}
  {# Find the matching BoundField instance #} 
  {% for field in myform %}
    {% if field.field == x %}
      {# Matching BoudField instance found, display it. #}
      {{ field }}
    {% endif %}
  {% endfor %}
{% endfor %}

编辑: 一个更好的方法: 一个领域有一个

get_bound_field(self, form, field_name)

方法根据文档:https://docs.djangoproject.com/en/1.10/_modules/django/forms/fields/#Field.get_bound_field

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

^{pr2}$

然后,模板将保持不变:

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

一切都应该如你所愿。在

相关问题 更多 >