Django WizardForm и вторая форма будут «динамическими» - PullRequest
0 голосов
/ 10 августа 2009

У меня есть 2 дня на размышления, как сделать это.

У меня есть две формы (на самом деле 4), первая форма имеет переключатели, где вторая форма будет отличаться, если пользователь выберет вариант с переключателем.

Как всегда извините за мой английский.

плохо объясняю:

У первой формы есть опции с переключателями, с опциями, которые приведут к «вызываемой форме», у меня есть 3 формы, которые ждут.

Я читал о WizardForm, но я не знаю, как вывести вторую форму динамически.

Пожалуйста, нужна помощь с этим: (

Спасибо

1 Ответ

2 голосов
/ 11 августа 2009

Вероятно, это поможет, если вы прочитаете код contrib/formtools/wizard.py. Это довольно просто, и следуя ему, вы лучше поймете, что вам нужно делать.

Есть хук process_step, который вам необходимо переопределить в своем собственном мастере форм. Что я сделал, так это посмотрел, на каком этапе я выполнял какую-то специальную обработку, если форма была проверена (т. Е. Она имела cleaned_data):

class MyFormWizard(FormWizard):

    def process_step(self, request, form, step):
        if step == 0 and hasattr(form, 'cleaned_data'):
            # Do special stuff

Если я правильно понимаю ваш вопрос, вы хотите, чтобы на 2-м шаге отображалась конкретная форма на основе выбора пользователя из 1-й формы. В этом случае первое, что я могу попробовать, - это создать динамическую универсальную форму для 2-го шага, где используемые поля основаны на результатах из первой формы (не проверено):

    def process_step(self, request, form, step):
        if step == 0 and hasattr(form, 'cleaned_data'):
            # The initial attribute is a dictionary which maps the step number
            # to a dictionary of what should be initial values.
            # You can use/abuse this in a form's constructor
            self.initial[1] = {'fields': {'field1': field, 'field2': another}}

Затем во втором классе

class MySecondForm(forms.Form):
    def __init__(self, *args, **kwargs):
        super(StatBuilderForm2, self).__init__(*args, **kwargs)

        for name, field in kwargs['initial']['fields'].iteritems():
              self.fields[name] = field
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...