0

请原谅我对 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) - 它应该在其中

我也没有收到任何错误。

知道我做错了什么吗?

4

1 回答 1

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.

于 2013-08-01T22:40:48.007 回答