Django表单向导之间持久的初始数据

时间:2016-07-04 13:37:37

标签: python django django-formwizard

我在项目中使用Django Form Wizard。我想允许用户提供特定字段的初始数据,我也希望在禁用初始数据的情况下创建字段。

  

问题是,当用户点击后退按钮时,初始数据将被删除。

例如,这是我的表格(初始数据设为第二步) enter image description here 正如您在此处看到的一切都很好,表单字段被禁用并且选择了值。现在我们点击next

enter image description here 我们点击next,我们第二步没有遇到任何问题,但现在点击back .. enter image description here

表单字段仍处于停用状态,但值已消失!

我正在使用的代码就像这样(相关部分):
表格

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

任何想法都将不胜感激!

1 个答案:

答案 0 :(得分: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