无法获取要添加到django formset的ID

时间:2012-08-22 10:46:56

标签: django forms formsets

我在尝试发布表单时遇到错误,这没什么意义。

错误:

MultiValueDictKeyError at /admin/courses/course-selector/add/
"Key 'form-0-id' not found in <QueryDict: 

所以我已经完成了谷歌搜索,并得出结论,因为我自己绘制了表格(我已经建了一张桌子并在我想要的地方打印出每个字段)。

所以我试图添加一个带有id的字段,但它不会打印。它只是在模板中没有id我写入表单。我不知道现在要做什么因为谷歌我已经遵循了这个案例的既定建议并发现了一个问题。

模板代码。

<form action="." method="POST" id="formset">
<table>
    <tr>
        {{ formset.management_form }}
    </tr>
    <tr>
        <th></th>
        {% for field in formset.forms.0 %}
            {% if not field.is_hidden %}
                <th>{{ field.label }}</th>
            {% endif %}
        {% endfor %}

    </tr>

    {% for f in formset.forms %}
        <tr>
            <td><input type="checkbox" id="checkbox_{{ f.id }}" /></td>
            <td>{{ f.id }}</td>
            {% for field in f %}
                {% if not field.is_hidden %}
                    <td>
                        {{ field.errors }}
                        {{ field }}
                    </td>
                {% else %}
                    <td valign="bottom">{{ field }}</
                {% endif %}
            {% endfor %}
        </tr>
    {% endfor %}

   </table>
</form>
为了简洁起见......

为什么不{{f.id}}输出任何内容。

EDIT1 添加生成formset的代码,这可能就是我没有获得id的原因。

            InstanceFormSet = formset_factory(BulkAddInstanceForm, extra=0)
            # build the list for populating the forms
            n, datalist = 0, []
            while n < int(input_data['copies']):
                datalist.append(data)
                n +=1
            formset = InstanceFormSet(initial=datalist)

3 个答案:

答案 0 :(得分:0)

我在你的模板中发现了多个错误:

  1. 您正在迭代formset中的所有表单,但您还显示第一个表单的所有非隐藏字段。这意味着您有重复的字段
  2. 稍后您将迭代所有表单中的所有字段。但是你也在两次显示id字段。一次作为字段,一次作为复选框ID的一部分。如果表单没有id字段,则不会输出任何内容,如f.id

答案 1 :(得分:0)

我使用{{forloop.counter0}}或{{forloop.counter}}  找出formset中表单的id应该是

答案 2 :(得分:0)

比赛晚了几年,但这就是答案。把它放在{% for f in formset.forms %}

{{ forloop.counter }}

这将输出与每个表格相关联的数字(例如,1,2,3等)