views:

92

answers:

1

I'm using a modelform for User like so:

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

but the password field shows up as a regular textfield, not a password input. How do I make sure it shows a password field?

I tried this:

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

but that doesn't work either.

I'm also trying to add a confirm password field like so, but this causes no fields to be displayed:

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',)
+1  A: 

You're missing the difference between form fields and form widgets. The widget is the HTML representation of the field. If you're on Django 1.2 you can use this syntax:

EDIT: Update to include confirm password

class UserForm(forms.ModelForm):

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

    class Meta:
        model = User
        fields = ('username','password','email',)
        widgets = {
            'password': forms.PasswordInput(),
        }
Zach
thanks, I didn't know you could do thatwould it be the same thing for confirm password?
JPC
Since that field isn't in the model, you'll need to declare it separately...I'll update my answer
Zach
I'm still not sure I understand why I have to specify the PasswordInput as a widget to a CharField. They are both forms aren't they? Why can't I just use PasswordInput?Thanks!
JPC
There's a distinction between form fields and form widgets. You can think about it this way -- The form field decides how python should work with the field (validation, type, etc). The form widget is the HTML representation. In your case you want to deal with character input, but you want the HTML to show a password input.
Zach
Thanks, that makes sense
JPC
On line three you have `form` as singular, and I'm assuming it's supposed to be plural
Thr4wn
@Thr4wn - thanks for catching that. I'll update my answer.
Zach