2010-08-20 53 views
9

我使用的ModelForm的用戶,像這樣:Django的密碼問題

class UserForm(forms.ModelForm): 
    class Meta: 
     model = User 
     fields = ('username','password','email',) 

但密碼字段顯示爲一個普通文本框,而不是一個密碼輸入。我如何確保它顯示密碼字段?

我嘗試這樣做:

class UserForm(forms.ModelForm): 
    username = forms.CharField(max_length = 15, min_length = 6) 
    password = forms.PasswordInput() 
    class Meta: 
     model = User 
     fields = ('username','password','email',) 

但這並不工作。

我也想添加一個確認密碼字段像這樣,但是這會導致不顯示的字段:

class UserForm(forms.ModelForm): 
    username = forms.CharField(max_length = 15, min_length = 6) 
    password = forms.PasswordInput() 
    cpassword = forms.PasswordInput() 

    def clean(self): 
     if self.cleaned_data['cpassword']!=self.cleaned_data['password']: 
      raise forms.ValidationError("Passwords don't match") 

    class Meta: 
     model = User 
     fields = ('username','password','cpassword','email',) 

回答

19

你錯過表單域之間的差異,形成小部件。該小部件是該字段的HTML表示。如果你在Django的1.2,你可以使用這個語法:

編輯:更新,包括確認密碼

class UserForm(forms.ModelForm): 

    confirm_password = forms.CharField(widget=forms.PasswordInput()) 

    class Meta: 
     model = User 
     fields = ('username','password','email',) 
     widgets = { 
      'password': forms.PasswordInput(), 
     } 
+0

謝謝,我不知道你能做到這一點 這將是相同的確認密碼的東西? – JPC 2010-08-20 15:46:11

+0

由於該字段不在模型中,因此您需要單獨聲明它...我將更新我的答案 – Zach 2010-08-20 17:28:12

+0

我仍然不確定我明白爲什麼必須將PasswordInput指定爲CharField的窗口小部件。他們都是形式不是他們?爲什麼我不能使用PasswordInput? 謝謝! – JPC 2010-08-20 17:36:23