Динамическое количество шагов с помощью мастера Django - PullRequest
3 голосов
/ 20 марта 2012

Возможно ли, что шаги мастера являются динамическими? Например, второй шаг повторяется n раз?

Ответы [ 3 ]

4 голосов
/ 12 июля 2012

У меня была такая же проблема, и мастер форм (даже в Django 1.4) просто не работал для меня.Это было так много настроек, что некоторые вещи начали работать неправильно, и отладка была ужасной.

Я написал некоторый код, основанный на существующих предложениях.Пожалуйста, смотрите мои суть, где я разместил решения, которые отлично работали для меня.Если у вас есть какие-либо комментарии или предложения (включая название класса), пожалуйста, опубликуйте их.

  • Многостраничный менеджер форм, организованный в виде (математического) графика, с динамическими путями (следующая форма зависит от фактического состояния и пользовательского ввода) и количества форм.Хранение и проверка обрабатываются.Основан на Django-1.4's 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

2 голосов
/ 25 сентября 2014

Я тоже боролся с этой проблемой.Томмазо Барбугли прав в создании фабрики для класса.В настоящее время я работаю с 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)
2 голосов
/ 20 марта 2012

Что вы хотите сделать?

Если вы хотите создать мастера, в котором шаг x повторяется n раз, тогда ответ - да, вы можете сделатьэто и не так сложно.

Вам просто нужно создать фабрику классов мастера, которая создает класс с заданными конкретными параметрами, и все готово.

Если вы хотите сказать, могу ли я изменитьшаги мастера на лету.Ответ все еще да, но тогда все станет немного сложнее, чем это, так как вам придется изменить внутреннее состояние мастера после его инициализации.

Это совсем не весело, если вам действительно нужно второевариант, который я действительно предлагаю обдумать, попытаться найти альтернативный дизайн и выбрать динамический подход мастера в качестве крайней меры.

...