Django向导表单的动态步骤数

3

向导步骤是否可以是动态的?例如,第二步重复n次发生?

3个回答

4

我也遇到了同样的问题,即使是在Django 1.4中,表单向导也无法满足我的需求。需要进行大量的自定义,而一些东西开始出现问题,并且调试非常麻烦。

我编写了一些基于现有类的代码。请查看我的gists,其中我发布了适合我的解决方案。如果您有任何意见或建议(包括类的名称),请发表评论。

  • 多页表单管理器,排列为(数学)图形,具有动态路径(下一个表单取决于实际状态和用户输入)和表单数量。存储和验证已处理。基于Django-1.4的django.contrib.formtools.wizard.views.SessionWizardViewhttps://gist.github.com/3098817

  • 自定义Django SessionStorage。删除了所有涉及文件的功能。基于Django-1.4的django.contrib.formtools.wizard.storage.base.BaseStoragedjango.contrib.formtools.wizard.storage.session.SessionStoragehttps://gist.github.com/3080251


2

你想做什么?

如果你想创建一个向导,其中第 x 步重复 n 次,那么答案是肯定的,你可以这样做,而且并不难。

你只需要创建一个向导类工厂,根据特定的参数创建类,然后你就完成了。

如果你的意思是,我可以在运行时更改向导的步骤。 答案仍然是肯定的,但是这会比较麻烦,因为你将不得不在初始化之后更改向导的内部状态。

这一点一点也不有趣,如果你真的需要第二个选项,我强烈建议你考虑一下,尝试找到替代设计,并把动态向导方法作为最后的选择。


1
你能提供向导类工厂的代码吗? 这个工厂的参数会是什么? - FlogFR

2

我也曾经遇到过这个问题。Tommaso Barbugli提到了创建该类的工厂是正确的。

我目前正在使用Django 1.6。

在url中,包含以下内容:

url('/create_wizard/', factory_wizard, name='factory_wizard')

这是工厂:

class WizardClass(SessionWizardView):
    ...

def factory_wizard(request, *args, **kwargs):
    parameter_to_know_which_step_number = #  I let you implement this one ( I did it by the session data )
    ret_form_list = [FirstFormClass, SecondFormClass]

    for _ in range(parameter_to_know...):
        form_list.append(SecondFormClass)

    class ReturnClass(WizardClass):
        form_list = ret_form_list

    return ReturnClass.as_view()(request, *args, **kwargs)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接