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:在几个页面上“拆分”一个表单的主要内容,如果未能解决你的问题,请参考以下文章