2011-05-10 53 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