0

假设我在一个步骤中有一个输入,在下一步有另一个输入(我正在使用 SessionWizardView)。我需要验证下一步输入是否与上一步的输入相同。如果输入与来自 previos 步骤的输入不同,那么在旅途中更新验证器以显示正确的错误会很棒,因为我使用的是在提交之前执行 django 表单验证器的 ajax 验证。

我想过在第二步输入验证器中与 ThreadLocal.get_current_request() 进行会话并以某种方式进行比较。但我认为这不是一个好的解决方案:) 有什么建议吗?

4

1 回答 1

1

我认为应该这样做:

class MyWizard(SessionWizardView):
    def get_form_kwargs(self, step):
        kwargs = {}
        if step == 'second_step':
            cleaned_data = self.get_cleaned_data_for_step('first_step')
            kwargs.update({'first_input': cleaned_data['first_input'] })

        return kwargs

然后你以你的第二种形式弹出它

class SecondForm(forms.Form):
    def __init__(self, *args, **kwargs):
        self.first_input = kwargs.pop('first_input', None)
        super(SecondForm, self).__init__(*args, **kwargs)

    def clean(self):
        super(SecondForm, self).clean()
        if any(self.errors):
            return

        # compare self.first_input with self.cleaned_data['second_input']

        return self.cleaned_data
于 2013-06-23T07:04:50.520 回答