请原谅我对django的新手,但我正在尝试正确验证名为domainNm
的表单域
形式
class SubmitDomain(ModelForm):
class Meta:
model = Tld #Create form based off Model for Tld
fields = ['domainNm',]
def clean_domainName(self):
cleanedDomainName = self.cleaned_data.get('domainNm')
if Tld.objects.filter(domainNm=cleanedDomainName).count > 1:
errorMsg = u"Sorry that domain is not available."
raise ValidationError(errorMsg)
else:
return self.cleaned_data
## This creates the form.
form = SubmitDomain()
目前,如果我输入:
abcdefghidfghiqwertyuiopasdfghjklcvbndmsja.com
或
df.com
或
df.com
(再次)
两者都有效,但不应该是。
没有检查域是否已经存在(如form
中所述) - 它应该
我也没有收到任何错误。
知道我做错了吗?
答案 0 :(得分:2)
我在这里看到了几个问题。
一,您的clean
方法与字段名称不匹配。而不是clean_domainName
,而是需要将其命名为clean_domainNm
。至少与你的模型字段名称一样长。
二,你的比较if Tld.objects.filter(domainNm=cleanedDomainName).count > 1:
是错误的。 count
是一种方法 - 您需要调用它。
if Tld.objects.filter(domainNm=cleanedDomainName).count() > 1:
三,我认为你的逻辑错了。这将允许创建给定名称的第二个实例,因为count()
将返回1,这意味着表单有效。我想您要检查count()
对0,或者更好地使用exists()
代替:
if Tld.objects.filter(domainNm=cleanedDomainName).exists():
更好的是,将字段定义为unique=True
。