Django Modelform-表单字段上的验证
请原谅,我是django的新手,但我正在尝试正确验证名为:Django Modelform-表单字段上的验证,django,forms,django-forms,Django,Forms,Django Forms,请原谅,我是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.ge
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
(再次)
两者都是有效的,但它们不应该是有效的
它不检查域是否已经存在(如表单中所述)
中应该包含的域
我也没有收到任何错误
知道我做错了什么吗?我发现这里有几个问题 第一,您的
clean
方法与字段名不匹配。它需要命名为clean\u domainNm
,而不是clean\u domainName
。至少只要这是您的模型字段名
第二,如果Tld.objects.filter(domainNm=cleanedDomainName).count>1:错误,则比较count
是一个方法-您需要调用它
if Tld.objects.filter(domainNm=cleanedDomainName).count() > 1:
第三,我认为你的逻辑是错误的。这将允许创建给定名称的第二个实例,因为count()
将返回1,表示该表单有效。我想您应该检查0对应的count()
,或者最好使用exists()
:
if Tld.objects.filter(domainNm=cleanedDomainName).exists():
更好的是,将字段定义为unique=True
它是字段的模型级属性。除了表单验证之外,它还将在DB级别强制执行。模型级验证非常重要。我认为这是显示tld存在错误所必需的。exists()也是一个很好的例子。谢谢大家!@Alasdair正确地指出,您需要返回已清除的值,而不是已清除的\u数据
字典。
if Tld.objects.filter(domainNm=cleanedDomainName).exists():