django形式与客户参数和验证没有得到干净的功能

时间:2013-09-12 16:27:28

标签: django django-forms django-validation

我有以下表格:

class GroupForm(forms.ModelForm):
    class Meta:
        model = Group

    def __init__(self, customer):
        self.customer = customer
        super(GroupForm, self).__init__()

    def clean(self):
        cleaned_data = super(GroupForm, self).clean()
        email = cleaned_data.get('email')

        print email

        try:
            groups = Group.objects.filter(email=email, customer=self.customer)
            if groups:
                messsge = u"That email already exists"
                self._errors['email'] = self.error_class([messsge])
        except:
            pass

        return cleaned_data 

我从视图中调用表单如下:

if request.method == "POST":
    form = GroupForm(request.POST, customer, instance=group)
    if form.is_valid():
        form.save()

问题是永远不会触发验证。此外,电子邮件的打印永远不会被打中,这意味着清除功能永远不会被击中。

为什么会这样?

1 个答案:

答案 0 :(得分:0)

我在SO上看到了很多问题,原因通常都是一样的。您已覆盖 init 方法并更改了签名,因此第一个元素现在是customer,而不是data。但是当您在视图中对其进行实例化时,首先会传递request.POST,因此参数不会与正确的变量匹配。

此外,您不会将参数传递给super方法,因此甚至不会看到POST。

请改为:

class GroupForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        self.customer = kwargs.pop('customer', None)
        super(GroupForm, self).__init__(*args, **kwargs)

并在视图中:

form = GroupForm(request.POST, customer=customer, instance=group)