Django Form Wizard сохраняет исходные данные между шагами

Я использую в проекте Django Form Wizard. Я хочу разрешить пользователям предоставлять исходные данные для определенного поля, а также хочу сделать поле с предоставленными исходными данными отключенными.

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

Например, это моя форма (исходные данные задаются как второй шаг) введите здесь описание изображения Как видите, здесь все в порядке, поля формы отключены, а значение выбрано. Теперь мы нажимаем next.

введите описание изображения здесь Мы нажимаем next и переходим ко второму шагу без проблем, но теперь, если я нажму back.. введите здесь описание изображения

Поля формы по-прежнему отключены, но значение исчезло!

Код, который я использую, выглядит следующим образом (соответствующая часть):
Форма

CHOICES=[('ONE','Choice 1'),
         ('TWO','Choice 2'),
         ('THREE','Choice 3'),
         ('FOUR','Choice 4'),
        ]

class BookingForm1(forms.Form):
    """ Select reservation type"""
    sko = forms.ChoiceField(choices=CHOICES, widget=forms.RadioSelect())

Мастер

def get_form(self, step=None, data=None, files=None):
        form = super(PresentView, self).get_form(step, data, files)
        step = step or self.steps.current

        initial = {
            'sko': {
                'initial':'TWO'
            }
        }

        for field in initial:
            try:
                form.fields[field].widget.attrs['readonly'] = True
                form.fields[field].widget.attrs['disabled'] = True
                form.fields[field].required = False
                form.fields[field].initial = initial[field]['initial']
            except:
                pass

Благодарим за любую идею!


person intelis    schedule 04.07.2016    source источник
comment
У меня нет решения для вас, но вот объяснение того, почему оно не работает: когда вы отключаете поле, это означает, что браузер не отправляет значение на сервер. Когда вы вернетесь к исходной форме, форма будет привязана, поэтому Django использует данные формы и игнорирует данные initial. Однако данные формы не содержат значения для отключенного поля, поэтому при отображении формы значение не выбирается.   -  person Alasdair    schedule 04.07.2016


Ответы (1)


Я смог решить эту проблему, удалив дополнительные поля для объектов типа ChoiceField.

 for field in initial:
            try:
                field_o = form.fields[field]
                # Remove extra choices if Choice field
                if type(field_o) == forms.fields.ChoiceField:
                    field_o.choices = [(key, value) for key,value in field_o.choices if key == initial[field]['initial']]
                else:
                    field_o.widget.attrs['readonly'] = True

                field_o.initial = initial[field]['initial']
            except:
                pass
person intelis    schedule 04.07.2016