【问题标题】:Django - Submit multiple forms with one submit buttonDjango - 使用一个提交按钮提交多个表单
【发布时间】:2017-05-03 20:55:19
【问题描述】:

我正在尝试创建一个签到页面,其中列出了所有已注册的人。每个人都有一个输入框,用于提交他们在活动中的小时数。我想要它,以便为每个人多次提交相同的表格;我不想为每个人都有一个提交按钮,因为会有几个人,这会很乏味。我正在使用 for 循环 {% for signups in signup %} 来遍历已注册人员的查询集。

这里有一个截图来说明:

在后端,我希望它将小时数保存到查询集中具有匹配名称的行中。

HTML:

<form action="/events/occ_checkin" class="form" method="POST" id="checkin_{{ signups.id }}" name="checkin_{{ signups.id }}">{% csrf_token %}
    {% for form in formset %}
    <h5>
    <label for="{{ form.fullname.id_for_label }}">***how would I get the attendee's name?***</label>
    <input id="{{ form.fullname.id_for_label }}" name="{{ form.fullname.html_name }}" type="hidden" value="***attendee's name here as well***">
    <input id="{{ form.hours.id_for_label }}" name="{{ form.hours.html_name }}" step="0.01" type="number" class="form-control" value="{{ events.hours }}">
    </h5>
    {% endfor %}
    <button class="btn btn-primary btn-block" type="submit">Submit</button>
</form>

【问题讨论】:

  • docs.djangoproject.com/en/1.10/topics/forms/formsets 特别想看看。模型表单集。
  • 好的。我尝试过使用表单集,但无法找到一种方法来显示活动参与者的姓名。我正在使用 for 循环遍历与会者 {% for signups in signup %}{{ signups.fullname }}*form stuff*{% endfor %}。但是因为我使用的是{% for form in formset %},所以我想不出一种方法来获取每个与会者的姓名,而不让他们重复几次。我已经编辑了我的问题以获得我当前的 html 代码。
  • 在模型表单中,如果我没记错的话,您可以通过“实例”属性访问关联的模型。这不是我的想法,但 django 文档肯定可以证实。
  • 我正在尝试为 html 中 for 循环的特定迭代获取变量 {{ signups.fullname }},我该怎么做? HTML 在我的问题中。
  • 我想出了一个办法:{% for signups in signup %}{% if forloop.parentloop.counter == forloop.counter %}{{ signups.fullname }}{% endif %}{% endfor %}

标签: python django forms django-forms django-queryset


【解决方案1】:

使用modelformset_factory 有效。

HTML:

<form action="/events/occ_checkin" class="form" method="POST" id="checkin_{{ signups.id }}" name="checkin_{{ signups.id }}">{% csrf_token %}
    {% for form in formset %}
    <h5>
    <label for="{{ form.fullname.id_for_label }}">{% for signups in signup %}{% if forloop.parentloop.counter == forloop.counter %}{{ signups.fullname }}{% endif %}{% endfor %}</label>
    <input id="{{ form.fullname.id_for_label }}" name="{{ form.fullname.html_name }}" type="hidden" value="{% for signups in signup %}{% if forloop.parentloop.counter == forloop.counter %}{{ signups.fullname }}{% endif %}{% endfor %}">
    <input id="{{ form.hours.id_for_label }}" name="{{ form.hours.html_name }}" step="0.01" type="number" class="form-control" value="{{ events.hours }}">
    </h5>
    {% endfor %}
    <button class="btn btn-primary btn-block" type="submit">Submit</button>
</form>

对于views.py 和forms.py,我只是按照formsets 上的文档进行操作。

【讨论】:

    猜你喜欢
    • 2012-01-23
    • 2015-10-04
    • 2016-04-06
    • 2013-02-13
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多