我有以下表格:
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()
问题是永远不会触发验证。此外,电子邮件的打印永远不会被打中,这意味着清除功能永远不会被击中。
为什么会这样?
答案 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)