向导步骤是否可以是动态的?例如,第二步重复n次发生?
我也遇到了同样的问题,即使是在Django 1.4中,表单向导也无法满足我的需求。需要进行大量的自定义,而一些东西开始出现问题,并且调试非常麻烦。
我编写了一些基于现有类的代码。请查看我的gists,其中我发布了适合我的解决方案。如果您有任何意见或建议(包括类的名称),请发表评论。
多页表单管理器,排列为(数学)图形,具有动态路径(下一个表单取决于实际状态和用户输入)和表单数量。存储和验证已处理。基于Django-1.4的django.contrib.formtools.wizard.views.SessionWizardView
。
https://gist.github.com/3098817
自定义Django SessionStorage。删除了所有涉及文件的功能。基于Django-1.4的django.contrib.formtools.wizard.storage.base.BaseStorage
和django.contrib.formtools.wizard.storage.session.SessionStorage
。
https://gist.github.com/3080251
你想做什么?
如果你想创建一个向导,其中第 x 步重复 n 次,那么答案是肯定的,你可以这样做,而且并不难。
你只需要创建一个向导类工厂,根据特定的参数创建类,然后你就完成了。
如果你的意思是,我可以在运行时更改向导的步骤。 答案仍然是肯定的,但是这会比较麻烦,因为你将不得不在初始化之后更改向导的内部状态。
这一点一点也不有趣,如果你真的需要第二个选项,我强烈建议你考虑一下,尝试找到替代设计,并把动态向导方法作为最后的选择。
我也曾经遇到过这个问题。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)