使用Django Wizard的动态步骤数

时间:2012-03-19 21:01:21

标签: python django wizard django-formwizard

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

3 个答案:

答案 0 :(得分:4)

我有同样的问题,表单向导(即使在Django 1.4中)也不适用于我。这是一个很大的定制,有些事情开始出错,调试很糟糕。

我确实根据现有的clases编写了一些代码。请参阅我的要点,我发布了一个对我有用的解决方案。如果您有任何意见或建议(包括课程名称),请发布。

  • 多页表单管理器,排列为(数学)图,具有动态路径(下一种形式取决于实际状态和用户输入)和表单数量。处理存储和验证。基于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

答案 1 :(得分:2)

你想做什么?

如果你想创建一个向导 x 重复 n 次的向导,那么回答是肯定的,你可以做到这一点,并不是那么难。

您只需创建一个向导类工厂,创建给定特定参数的类,您就完成了。

如果您的意思是,我可以即时更改向导的步骤。 答案仍然是肯定的,但事情会比这更复杂,因为你必须在初始化后改变向导的内部状态。

这根本不好玩,如果你真的需要我真正建议考虑的第二个选项,试着找一个替代设计并选择动态向导方法作为最后的手段。

答案 2 :(得分:2)

我也在努力解决这个问题。 Tommaso Barbugli对于为班级创建工厂是正确的。 我目前正在使用Django 1.6。

在网址中

,包括:

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)