【问题标题】:Django Form Wizard persistent initial data between steps步骤之间的 Django 表单向导持久初始数据
【发布时间】:2016-11-06 06:28:01
【问题描述】:

我在项目中使用Django Form Wizard。我希望允许用户为特定字段提供初始数据,并且我还希望禁用提供初始数据的字段。

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

例如这是我的表单(初始数据设置为第二步) 如您所见,这里一切正常,表单字段被禁用并且值被选中。现在我们点击next

我们点击next,我们可以毫无问题地进入第二步,但现在如果我点击back..

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

我使用的代码是这样的(相关部分):
Form

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

任何想法将不胜感激!

【问题讨论】:

  • 我没有为您提供解决方案,但这里解释了它为什么不起作用:当您禁用该字段时,这意味着浏览器不会将值提交给服务器。当你回到原来的表单时,表单是绑定的,所以 Django 使用了表单数据并忽略了initial 数据。但是表单数据不包含禁用字段的值,因此在呈现表单时不会选择任何值。

标签: python django django-formwizard


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    • 2019-04-18
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多