【问题标题】:Django- get data from custom html input in templateDjango-从模板中的自定义html输入获取数据
【发布时间】:2011-10-24 10:48:21
【问题描述】:

我有一个页面可以让查看者编辑对象。该页面显示一个表单集,每个对象都有一个表单,如果他们希望创建一个对象,还有一个空表单,我希望在每个预先存在的对象下都有一个标记为“删除”的复选框(也就是说,不是最后一个,因为它是多余的空表单)。

我在模板中添加了以下代码:

{% for form in formset %}
{{ form.as_p }}
    {% if forloop.last %}
    {% else %}
    Delete?<input type="checkbox" name="delete" value="delete"><br>
    {% endif %}
{% endfor %}

这会显示复选框,但我不知道如何获取有关在处理表单时是否选中该框的数据。

作为背景,我正在使用 modelformset_factory(MyClass, extra=1) 创建表单集,我不只是使用 can_delete,因为我不希望删除复选框出现在我最后一个空表单下,所以我更愿意如果可能的话,直接在模板中添加一个额外的输入。

我如何获得有关该框是否已被选中的数据?

【问题讨论】:

    标签: django django-templates django-forms


    【解决方案1】:

    既然是表格,那么你有方法处理吗?所以你可以通过 request.POST.getlist('delete') 获取它的标志值

    【讨论】:

    • 不,恐怕这行不通。我需要获取与每个删除复选框关联的对象,但即使是已选中的框列表(按顺序)也可以使用。 request.POST['delete'] 会返回一个字符串 'delete',无论有多少或哪些框被选中。
    • 抱歉,无法在 cmets 中询问您,所以这是我的错误。查看我的版本:从中您将获得所有选中复选框的列表。然后您必须将值设置为对象 id,这样您将获得带有已检查对象 id 的列表。
    • 如果你走那条路,请确保检查 ID 以确保它确实在表单集中。您也可以使用表单编号 (forloop.counter0) 然后拉取关联的 form.instance
    • @Art 的第一个答案后我改为&lt;input type="checkbox" name="delete" value="delete{{forloop.counter}}"&gt;&lt;br&gt; 但发现如果选中第一个和第二个框,它只返回“delete2”,getlist 给出错误 MultiValueDictKeyError: Key 'delete' not在 QueryDict 中找到...有什么建议吗?
    • 哎呀,忘了把括号改成圆括号了。 getlist 现在正在工作,非常感谢。正是我需要的。
    猜你喜欢
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 2020-02-18
    • 2017-11-18
    • 2013-11-19
    • 2016-02-08
    • 2019-03-17
    相关资源
    最近更新 更多