2010-08-20 56 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