Modelform - 表单字段的验证

时间:2013-08-01 22:24:30

标签: 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.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中所述) - 它应该

我也没有收到任何错误。

知道我做错了吗?

1 个答案:

答案 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