我在项目中使用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
任何想法都将不胜感激!
答案 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