如何在Django-AllAuth中自定义ResetPasswordForm?

5

我遇到了几个问题。首先,从文档的配置部分开始...

ACCOUNT_FORMS (={})
Used to override forms, for example: {‘login’: ‘myapp.forms.LoginForm’}

我该在这里放什么?我知道它需要是一个(key, value)对,就像'password_reset_form':'myapp.forms.MyPasswordResetForm',但我怎么知道要使用正确的键?

其次,在我的forms.py中,我尝试扩展ResetPasswordForm ,如下:

from allauth.account.forms import ResetPasswordForm

class MyResetPasswordForm(ResetPasswordForm):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        # Override the email widget
        self.fields['email'].widget = forms.TextInput(attrs={'class':'form-control', 'type':'email', 'required':'required', 'placeholder':'Email'})

但是这一直给我一个错误:导入表单类accounts.forms时出错:“无法导入名称'ResetPasswordForm'”。如有建议或指导,将不胜感激。
2个回答

4

以下是您可以自定义的所有表单:

ACCOUNT_FORMS = {
    'login': 'allauth.account.forms.LoginForm',
    'signup': 'allauth.account.forms.SignupForm',
    'add_email': 'allauth.account.forms.AddEmailForm',
    'change_password': 'allauth.account.forms.ChangePasswordForm',
    'set_password': 'allauth.account.forms.SetPasswordForm',
    'reset_password': 'allauth.account.forms.ResetPasswordForm',
    'reset_password_from_key': 
    'allauth.account.forms.ResetPasswordKeyForm',
    'disconnect': 'allauth.socialaccount.forms.DisconnectForm',
}

此外,您可以查看文档以便自行了解。


2

我也记得遇到了第一个问题,但很惊讶在文档中找不到任何信息!最终我只能查看源代码,你需要放置的关键值在get_form_class函数的views.py文件中。

对于你的第二个问题,乍一看我不确定为什么导入失败-它对我有效。

您使用的all-auth版本是多少?


关于 get_form_class 的建议非常准确。我正在使用版本0.19.0。(至少,当我运行 pip freeze 时是这样的。)我怀疑我的 forms.py 中存在某种循环依赖。 - Ben
2
更新:看起来是循环依赖(不确定在哪里)。我将自定义PasswordResetForm的代码复制到forms2.py模块中,现在一切正常。 - Ben
1
@Ben 你是怎么做到的?我只复制了import和自定义函数到一个新的forms2.py文件中,但还是出现错误。我安装了最新的allauth版本。 - Stratford
@Stratford,循环导入很可能是在设置和表单文件之间引起的。您的表单不需要扩展allauth ResetPasswordForm,只需使用forms.Form即可(allauth会处理其他所有内容)。 - gdvalderrama

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接