Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django Modelform-表单字段上的验证_Django_Forms_Django Forms - Fatal编程技术网

Django Modelform-表单字段上的验证

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

请原谅,我是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
(再次)

两者都是有效的,但它们不应该是有效的

它不检查域是否已经存在(如
表单中所述)
中应该包含的域

我也没有收到任何错误


知道我做错了什么吗?

我发现这里有几个问题

第一,您的
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():