基于上一步的验证

时间:2013-06-22 21:26:19

标签: django django-formwizard

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

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

1 个答案:

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