Django中的表单问题 [英] Problem with form in Django

查看:203
本文介绍了Django中的表单问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



这里代码:



forms.py

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

def clean_password2自我):
password1 = self.cleaned_data.get(password1,)
password2 = self.cleaned_data [password2]
如果password1!= password2:
raise form.ValidationError(两个密码字段不匹配)
return password2

def save(self,* args,** kw):
self。 user.set_password(self.cleaned_data ['password1'])
打印通过设置。
self.user.save()

views.py

  def change_password(request):
form = ChangePasswordForm()
if request.method ==' POST':
form = ChangePasswordForm(request.POST,instance = request.user)
如果form.is_valid():
password1 = form.cleaned_data ['password1'];
password2 = form.cleaned_data ['password2'];
print password1 +==+ password2
form.save()
messages.success(请求,密码更新!)
返回HttpResponseRedirect('')

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

它不起作用,因为没有定义用户。问题是如何将用户传递给表单。想法?谢谢。

解决方案

只需将其作为 save 方法的参数。

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

...


form.save(request.user)


I'm trying to implement a form for let the user change their password.

Here the code:

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})

It doesn't work because user is not defined. The problem is how to pass user to the form. Ideas? Thanks.

解决方案

Just make it a parameter to the save method.

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

...


form.save(request.user)

这篇关于Django中的表单问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆