向导的步骤可能是动态的吗?比如第二步重复n次?
3 回答
我遇到了同样的问题,表单向导(即使在 Django 1.4 中)对我不起作用。定制太多了,以至于有些事情开始出错,调试也很糟糕。
我确实根据现有的类编写了一些代码。请参阅我的要点,我在其中发布了对我有用的解决方案。如果您有任何意见或建议(包括班级名称),请发表。
多页表单管理器,排列为(数学)图,具有动态路径(下一个表单取决于实际状态和用户输入)和表单数量。处理存储和验证。基于 Django-1.4 的
django.contrib.formtools.wizard.views.SessionWizardView
. https://gist.github.com/3098817自定义 Django 会话存储。删除了所有处理文件的功能。基于 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('/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)