save() 接受 1 个位置参数,但给定了 2 个 django allauth 重置密码形式

save() takes 1 positional argument but 2 were given djnago allauth resetpassword form

我需要将 recaptcha 字段添加到 allauth 重置密码表单,我根据 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'}

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

Traceback 切换到复制粘贴视图 /home/admin1/envs/myvenv/lib/python3.8/site-packages/django/core/handlers/exception.py,第 47 行,在内部 响应 = get_response(请求)... ▶ 本地变量 /home/admin1/envs/myvenv/lib/python3.8/site-packages/django/core/handlers/base.py,第 181 行,在 _get_response 响应 = wrapped_callback(请求, *callback_args, **callback_kwargs) ... ▶ 本地变量 /home/admin1/envs/myvenv/lib/python3.8/site-packages/django/views/generic/base.py,第 70 行,可见 return self.dispatch(请求, *args, **kwargs) … ▶ 本地变量 /home/admin1/envs/myvenv/lib/python3.8/site-packages/django/views/generic/base.py,第 98 行,正在调度中 return 处理程序(请求,*args,**kwargs)... ▶ 本地变量 /home/admin1/envs/myvenv/lib/python3.8/site-packages/allauth/account/views.py,第 102 行,在 post 响应 = self.form_valid(表格) … ▶ 本地变量 /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