0

我在尝试发布表单时遇到错误,这没有多大意义。

错误:

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 添加生成表单集的代码,这可能是我没有得到 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)
4

3 回答 3

0

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

  1. 您正在遍历表单集中的所有表单,但您还显示了第一个表单的所有非隐藏字段。这意味着您有重复的字段
  2. 稍后您将遍历所有形式的所有字段。但您也两次显示 id 字段。一次作为一个字段,一个作为复选框 id 的一部分。如果表单没有 id 字段,它不会输出任何内容作为 f.id
于 2012-08-22T11:10:28.250 回答
0

游戏晚了几年,但这就是答案。把这个放在下面{% for f in formset.forms %}

{{ forloop.counter }}

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

于 2018-04-14T22:28:07.330 回答
0

我使用 {{forloop.counter0}} 或 {{forloop.counter}} 来计算表单集中表单的 id 应该是什么

于 2017-09-28T14:57:48.147 回答