2010-08-20 38 views
9

Tôi đang sử dụng một ModelForm cho User như vậy:Django vấn đề mật khẩu

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

nhưng trường mật khẩu xuất hiện như một textfield thường xuyên, không phải là một đầu vào mật khẩu. Làm cách nào để đảm bảo nó hiển thị trường mật khẩu?

Tôi cố gắng này:

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

nhưng điều đó không làm việc, hoặc.

Tôi cũng đang cố gắng để thêm một trường mật khẩu xác nhận như vậy, nhưng điều này không gây lĩnh vực trưng bày:

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',) 

Trả lời

19

Bạn đang thiếu sự khác biệt giữa các lĩnh vực hình thức và hình thành các widget. Widget là biểu diễn HTML của trường. Nếu bạn đang ở trên Django 1.2 bạn có thể sử dụng cú pháp sau:

EDIT: Update để bao gồm mật khẩu xác nhận

class UserForm(forms.ModelForm): 

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

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

cảm ơn, tôi không biết bạn có thể làm điều đó nó sẽ là như nhau điều để xác nhận mật khẩu? – JPC

+0

Vì trường đó không có trong mô hình, bạn sẽ cần khai báo riêng ... Tôi sẽ cập nhật câu trả lời của mình – Zach

+0

Tôi vẫn không chắc mình hiểu tại sao tôi phải chỉ định PasswordInput làm tiện ích cho CharField . Họ là cả hai hình thức không phải là họ? Tại sao tôi không thể sử dụng PasswordInput? Cảm ơn! – JPC

Các vấn đề liên quan