2013-08-01 36 views
0

驗證請原諒我newbieness Django的,但我想正確驗證一個名爲formfield:domainNm的ModelForm - 在表單字段

形式

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概述) - 在它應該

我沒有得到任何錯誤,無論是。

任何想法我做錯了什麼?

回答

2

我在這裏看到幾個問題。

一,您的clean方法與字段名稱不匹配。它需要命名爲clean_domainNm而不是clean_domainName。至少只要這是您的模型字段名稱即可。

二,您的比較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

+0

is unique =真的模型驗證器?或形式水平? – CodeTalk

+0

這是該字段的模型級屬性。除了表單驗證之外,它還將在數據庫級別執行。 https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.Field.unique –

+0

模型級驗證的重點。我認爲這是它需要顯示一個tld存在的錯誤。存在()也很棒。謝謝! – CodeTalk