2011-05-10 28 views
2

我試圖實現一種讓用戶更改密碼的表單。Django中的表單存在問題

下面的代碼:

forms.py

class ChangePasswordForm(forms.Form): 
    password1 = forms.CharField(widget = forms.PasswordInput(), required = True) 
    password2 = forms.CharField(widget = forms.PasswordInput(), required = True) 

    def clean_password2(self): 
     password1 = self.cleaned_data.get("password1", "") 
     password2 = self.cleaned_data["password2"] 
     if password1 != password2: 
      raise forms.ValidationError("The two password fields didn't match.") 
     return password2 

    def save(self, *args, **kw): 
     self.user.set_password(self.cleaned_data['password1']) 
     print "Pass setted." 
     self.user.save() 

views.py

def change_password(request): 
    form = ChangePasswordForm() 
    if request.method == 'POST': 
     form = ChangePasswordForm(request.POST, instance = request.user) 
     if form.is_valid(): 
      password1 = form.cleaned_data['password1']; 
      password2 = form.cleaned_data['password2']; 
      print password1 + " == " + password2 
      form.save() 
      messages.success(request, "Password updated!") 
      return HttpResponseRedirect('') 

    return render(request, 'change_password.html', {'form': form}) 

,因爲用戶沒有定義它不工作。問題是如何將用戶傳遞給表單。想法?謝謝。

回答

5

採取成全它的一個參數save方法。

def save(self, user): 
    user.set_password(self.cleaned_data['password1']) 
    user.save() 

... 


form.save(request.user) 
+0

謝謝你。正確。 – 2011-05-10 22:09:55

0

用戶colud從request.user一般

+0

當然用戶必須登錄之前 – krzyhub 2011-05-10 21:25:50

+0

是的,但我的問題是我怎麼能通過它的形式。 – 2011-05-10 21:43:58

+0

對不起,我還在學英語 – krzyhub 2011-05-10 21:48:25