3

向导的步骤可能是动态的吗?比如第二步重复n次?

4

3 回答 3

4

我遇到了同样的问题,表单向导(即使在 Django 1.4 中)对我不起作用。定制太多了,以至于有些事情开始出错,调试也很糟糕。

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

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

  • 自定义 Django 会话存储。删除了所有处理文件的功能。基于 Django-1.4django.contrib.formtools.wizard.storage.base.BaseStoragedjango.contrib.formtools.wizard.storage.session.SessionStorage. https://gist.github.com/3080251

于 2012-07-12T15:25:02.730 回答
2

你想让我做什么 ?

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

您只需要创建一个向导类工厂,它会在给定特定参数的情况下创建类,然后就完成了。

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

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

于 2012-03-19T21:50:08.393 回答
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)
于 2014-09-25T17:08:50.537 回答