Django:在几个页面上“拆分”一个表单

Posted

技术标签:

【中文标题】Django:在几个页面上“拆分”一个表单【英文标题】:Django: "split" a form on several pages 【发布时间】: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 模板中的单独页面上。为此,我在网上搜索并偶然发现了两种我能想到的解决问题的方法:

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

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

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

【问题讨论】:

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

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

【讨论】:

以上是关于Django:在几个页面上“拆分”一个表单的主要内容,如果未能解决你的问题,请参考以下文章

在每个页面上放置一个 django 登录表单

使用 Django 在一个页面上登录和注册表单

在 Django 的一个页面上使用多个表单

Django:使用相同的视图在两个单独的页面上处理相同的表单

开始页面上的 Django 注册表单,没有重定向到登录页面

Django formwizard 与表单集和表单在同一页面上