2012-07-06 36 views
11

Tôi có một trang cài đặt tiểu sử nơi người dùng có thể thay đổi mật khẩu của họ và họ phải xác nhận nó nếu họ làm. Tôi không thể thực hiện điều này một trường bắt buộc, vì họ không phải thay đổi mật khẩu. Có một ví dụ để xác nhận mật khẩu xác nhận NẾU trường mật khẩu không rỗng? Và sau đó kiểm tra xem chúng có bình đẳng không? Tôi đã không thể tìm thấy bất kỳ ví dụ như vậy ...django xác nhận mật khẩu validator

Trả lời

24

Thêm dòng sau vào phương pháp của mẫu của bạn clean:

def clean(self): 
    password1 = self.cleaned_data.get('password1') 
    password2 = self.cleaned_data.get('password2') 

    if password1 and password1 != password2: 
     raise forms.ValidationError("Passwords don't match") 

    return self.cleaned_data 

EDIT

Thông điệp xác nhận lỗi trên sẽ đi vào non_field_errors. Bạn không chỉ định thông báo lỗi nào đang hiển thị trên mỗi trường mật khẩu, nhưng dựa trên ngữ cảnh, tôi sẽ tưởng tượng đó là thông báo "Trường này là bắt buộc". Nếu đúng như vậy, hãy đảm bảo rằng các trường biểu mẫu của bạn có required=False khi bạn xác định chúng hoặc nếu bạn đang làm việc với một lớp con biểu mẫu (và không thể chỉnh sửa trường biểu mẫu thực tế), bạn có thể ghi đè phương thức __init__ của biểu mẫu:

class MyForm(SomeOtherForm): 
    def __init__(self, *args, **kwargs): 
     super(MyForm, self).__init__(*args, **kwargs) 

     self.fields['password1'].required = False 
     self.fields['password2'].required = False 
+0

Xem chỉnh sửa ở trên. –

+1

Cảm ơn! tôi thực sự chỉ tìm thấy nó trước khi chỉnh sửa của bạn. Đối với bất kỳ ai khác tham khảo: https://docs.djangoproject.com/en/dev/ref/forms/validation/ – KVISH

+0

Tôi nghĩ rằng bạn thực sự muốn 'nếu password1 và password1! = Password2:' nếu không nhập mật khẩu trong 'password1' và không có gì trong 'password2' sẽ không gây ra lỗi xác thực (giả sử bạn có' required = False' trên cả hai trường, vì có khả năng là biểu mẫu 'thay đổi mật khẩu') – Anentropic

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