【问题标题】:Django: "split" a form on several pagesDjango:在几个页面上“拆分”一个表单
【发布时间】:2016-04-06 00:40:00
【问题描述】:

首先,我必须承认我对 Django 完全陌生。 我遇到了一个问题,但可能我只是不知道如何正确放置它以在网络上获得适当的帮助。因此,我感谢任何形式的帮助,并提前感谢您对我作为新手的耐心。^^

在我的 models.py 中,我定义了几个名为“choice_1”、“choice_2”等的 RadioSelects。在我的 template.html 中,我循环遍历 Django 的 form 对象以在一个表中获取所有 RadioSelects,这非常好:

<table class="table">
    {% for field in form %}
        <tr>{% formfield field %}</tr>
    {% endfor %}
</table>

这是我的问题:

现在我想将表单“拆分”到几个页面上,即我希望将每个 RadioSelect 放在同一个 HTML 模板中的单独页面上。为此,我在网上搜索并偶然发现了两种我能想到的解决问题的方法:

  1. In this thread,例如,推荐使用slice 模板过滤器。对我来说,这似乎是一个完美的解决方案,因为它可以通过使用{% for fields in form|slice:":1" %} 轻松实现。但是,我无法使用slice 完成它;实际上,它似乎并没有改变任何东西。

  2. 另一个想法是某种“分页”或类似的东西。我已经找到了 django-build-in pagination 类,但我无法解决问题。

不知道如何解决此问题,非常感谢您的帮助。非常感谢您并祝您好运,fh_!

【问题讨论】:

  • 您是否转换为第一个选项中提到的列表?
  • @oneyka:实际上,我认为form 对象已经是列表形式了。可能,我应该注意到我正在使用一个名为 oTree 的 Django 项目,它允许对社会科学领域的实验进行编程。文档声明“form 是一个特殊变量。它是一个 Django 表单对象,它是一个迭代,其元素是 Django 表单字段对象。formfield 可以将 Django 字段对象作为参数,也可以是像 {% formfield player.foo %} 和 {% formfield group.foo %} 这样的表达式,但 player.foo 必须写成文字 ..."

标签: django forms pagination views


【解决方案1】:

我认为您需要的是Django Form Wizard,它现在是 django-formtools 的一部分,而不是核心 Django。对于每个页面视图,您定义一个表单(在您的示例中,我猜您需要定义表单而不是依赖于 modelform 实现),然后将这些表单包装在 FormWizard 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-14
    • 2011-08-16
    • 2012-06-28
    • 1970-01-01
    • 2011-02-13
    • 2015-01-30
    • 2018-07-18
    • 2020-02-28
    相关资源
    最近更新 更多