2012-03-19 73 views

回答

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

2

那你想干什么?

如果你想创造一个步骤X重复ň倍那么答案是肯定的一个向导,你可以做到这一点,这并不难。

你只需要创建一个向导类工厂,创建给出了具体的参数类就大功告成了。

在你的意思的情况下,我可以改变即时向导的步骤。 答案仍然是,但然后事情会比这更复杂一点,因为你将不得不在初始化后改变向导的内部状态。

这不是乐趣可言,如果你真的需要第二个选项我真的建议考虑一下,尽量找到一个替代的设计和选择动态向导方式作为最后的手段。

+0

你能提供向导类工厂的代码? 和这个工厂的参数是什么? – aRkadeFR 2014-09-25 15:05:08

1

我这个问题太挣扎。 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)