【问题标题】:cant get an id to be added to a django formset无法将 id 添加到 django formset
【发布时间】:2012-08-17 18:36:44
【问题描述】:

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

错误:

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 }} 不输出任何内容。

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

【问题讨论】:

  • 嗯,也许是个愚蠢的问题,这是因为表单集基于没有 id 字段的表单吗?还是应该自动生成id?
  • f.id 应该是什么?一个字段?
  • f 是表单,所以 f.id 是表单的 id。因此询问表单集是否为表单生成一个 id。将添加表单集的生成以清除它。
  • stackoverflow.com/questions/9611232/… 在这个划线的问题上发现了完全相同的问题,但他的解决方案对我不起作用。我应该补充一下,我们在 django 1.3 上,所以在 1.4 中的表单集中的表单中添加了一个 id 吗?
  • 我仍然不明白为什么您认为表单应该具有id 属性。这不是表单默认的东西,这就是为什么我问你是否定义了一个名为id的字段。

标签: django forms formsets


【解决方案1】:

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

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

【讨论】:

  • 1.不知道我是如何复制任何东西的? 2. 这个我知道。这段代码是我试图弄清楚它是一个变量还是一个完整的字段。它既不,也不存在。
  • 你得到这样的表单 0 {% for field in formset.forms.0 %} 然后你遍历所有表单 {% for f in formset.forms %} 包括表单 0
  • 我得到一个表格 0 和一个表格 1(当我选择有多个表格时)但我的表格没有得到一个 id...我想我的问题归结为是否我是否应该在表单中内置一个 id 作为表单集的一部分,或者我是否必须手动创建它。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    {{ forloop.counter }}
    

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

    【讨论】:

      猜你喜欢
      • 2019-11-27
      • 1970-01-01
      • 1970-01-01
      • 2018-09-21
      • 1970-01-01
      • 1970-01-01
      • 2020-07-22
      • 2014-03-24
      • 2023-03-08
      相关资源
      最近更新 更多