微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

save() 接受 1 个位置参数,但 2 个被赋予了 djnago allauth resetpassword 形式

如何解决save() 接受 1 个位置参数,但 2 个被赋予了 djnago allauth resetpassword 形式

我需要在 allauth 重置密码表单中添加 recaptcha 字段,我根据 allauth documantion 覆盖表单

这是 forms.py 中的重置密码表单:

class MyCustomresetPasswordForm(ResetPasswordForm):
captcha = ReCaptchaField()

def save(self):

    # Ensure you call the parent class's save.
    # .save() returns a string containing the email address supplied
    email_address = super(MyCustomresetPasswordForm,self).save()

    # Add your own processing here.

    # Ensure you return the original result
    return email_address

在 settings.py 中:

ACCOUNT_FORMS = {'reset_password':'user.forms.MyCustomresetPasswordForm'}

但我收到此错误: TypeError at /accounts/password/reset/ save() 接受 1 个位置参数,但给出了 2 个

回溯切换到复制和粘贴视图 /home/admin1/envs/myvenv/lib/python3.8/site-packages/django/core/handlers/exception.py,第47行,内部 response = get_response(request) ... ▶ 本地变量 /home/admin1/envs/myvenv/lib/python3.8/site-packages/django/core/handlers/base.py,line 181,in _get_response 响应 =wrapped_callback(request,*callback_args,**callback_kwargs) ... ▶ 本地变量 /home/admin1/envs/myvenv/lib/python3.8/site-packages/django/views/generic/base.py,line 70,in view 返回 self.dispatch(request,*args,**kwargs) ... ▶ 本地变量 /home/admin1/envs/myvenv/lib/python3.8/site-packages/django/views/generic/base.py,line 98,in dispatch 返回处理程序(请求,*args,**kwargs)... ▶ 本地变量 /home/admin1/envs/myvenv/lib/python3.8/site-packages/allauth/account/views.py,第 102 行,在帖子中 response = self.form_valid(form) ... ▶ 本地变量 /home/admin1/envs/myvenv/lib/python3.8/site-packages/allauth/account/views.py,第690行,form_valid form.save(self.request) ...

解决方法

错误告诉您的是,您的 save() 方法只有一个参数,但是当它被调用时,它实际上得到了两个参数,这是因为 save() 方法有一个额外的参数 commit,正如您在 Django source code 上看到的那样。

您还应该将其添加到您的 super().save() 调用中。

您需要将它包含在您的 save() 定义中:

class MyCustomResetPasswordForm(ResetPasswordForm):
    captcha = ReCaptchaField()
    def save(self,commit=True):
        # As evergreen pointed out,you don't need to pass any arguments to super() on Python 3.
        email_address = super().save(commit)
    
        # Add your own processing here.
    
        # Ensure you return the original result
        return email_address

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。