2015-04-28 72 views
1

我正在使用AbstractUser模型創建自定義驗證模型。覆蓋AbstractUser模型的默認django用戶名驗證器

的問題是,我無法覆蓋的用戶名字段的默認表單字段驗證,這裏是我迄今爲止嘗試:

class RegularUserForm(forms.ModelForm): 
def __init__(self, *args, **kwargs): 
    super(RegularUserForm, self).__init__(*args, **kwargs) 
    self.fields['username'].help_text = None 
    self.fields['username'].default_validators = [] 
    self.fields['username'].validators = [] 

不知道如何做到這一點,重寫help_text成功,我也嘗試使用[None]而不是[]self.fields['username'].validators = [validate_username]其中validate_username是我創建的自定義驗證程序。


這裏的表單代碼,例如:

class RegularUserForm(forms.ModelForm): 
    username = forms.CharField(max_length=30, validators=[validate_username]) 
    email1 = forms.EmailField(required=True, label='') 

class Meta: 
    model = RegularUser 
    fields = ['username', 'password', 'email', 'email1', 'gender', ] 
    widgets = {'password': forms.PasswordInput(attrs={'placeholder': 'enter password'}), 
       'email': forms.EmailInput(attrs={'placeholder': 'enter email'}) 
       } 

def clean(self): 
    cleaned_data = super(RegularUserForm, self).clean() 
    email = self.cleaned_data.get('email') 
    email1 = self.cleaned_data.get('email1') 

    if email != email1: 
     self.add_error("email1", 'emails do not match') 
    return cleaned_data 

任何幫助表示讚賞!

回答

1

值得慶幸的是我找到了解決辦法,我是壓倒一切的車型在形式驗證,但不是那些(也做了相反的),所以我不得不這樣做:爲讀者

from utils import validate_username 
class RegularUserForm(forms.ModelForm): 
    username = forms.CharField(max_length=50, validators=[validate_username]) 

class RegularUser(AbstractUser): 
    def __init__(self, *args, **kwargs): 
     super(RegularUser, self).__init__(*args, **kwargs) 
     self._meta.get_field('username').validators = [validate_username] 

注:請確保您同時覆蓋模式和形式L evel驗證器!

+0

utils是我創建的庫,其中包含我的項目的自定義過濾器和驗證程序。 – HassenPy

0

您可以在表單上明確定義一個字段。這樣一來,你可以完全掌控的領域,包括它的驗證:

class RegularUserForm(forms.ModelForm): 
    username = forms.CharField(max_length=30) 

    class Meta: 
     model = User 
+0

對不起,延遲,我也試過這樣做,我遇到的問題是,即使自定義驗證程序通過,默認的一個不斷彈出! – HassenPy

+1

然後我懷疑它是由另一個問題引起的。您在什麼情況下使用該表格,並且可以顯示一些代碼? – knbk