Django表单,覆盖init,变量范围

时间:2012-08-01 18:50:26

标签: python django forms scope

在django中,我从视图中调用了一个表单,该表单传递了一个以init形式弹出的额外对象。我想在init之外的clean def中使用这个对象数据(person)。如何修复此传递信息的范围?谢谢!

class RegForm(forms.Form):
    first = forms.CharField(min_length=5)

    def __init__(self, *args, **kwargs):
        person = kwargs.pop("person")
        super(CompleteRegistrationForm, self).__init__(*args, **kwargs)

    def clean_first(self):
        if not self.cleaned_data['first'] == person.first:
            raise forms.ValidationError(_("This information does not match records."))
        else:
            return self.cleaned_data['first']

2 个答案:

答案 0 :(得分:1)

person应该是一个实例变量:

def __init__(self, *args, **kwargs):
    self.person = kwargs.pop("person")
    super(CompleteRegistrationForm, self).__init__(*args, **kwargs)

然后,在其他方法中,请将其称为self.person(不只是person)。

答案 1 :(得分:0)

您应该将其分配给self

self.person = kwargs.pop("person")

这是相当基础的Python - 您可能会从教程中受益。