Django allauth自定义登录表单未呈现自定义用户mod中的所有字段

2024-04-23 12:05:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试实现的登录组成一个自定义用户模型。是否可以从allauth.account.forms.LoginForm继承并向自定义登录表单添加自定义字段?在

Idea is to assign user with a role at the time of login by overriding login() method.

我遵循了allauth configuration并提到了登录时使用的表单设置.py有以下代码

AUTH_USER_MODEL = 'core.User'
ACCOUNT_SIGNUP_FORM_CLASS = 'core.forms.SignupForm'
ACCOUNT_FORMS = {'login': 'core.forms.CoreLoginForm'}

除了django.contrib.auth.backends.ModelBackendallauth.account.auth_backends.AuthenticationBackend之外,我没有使用任何身份验证后端。自定义注册是工作良好的我没有任何问题。但是自定义loginform并没有呈现用户模型中的所有字段。根据此SO Post中接受的答案继承Allauth LoginForm,并将choicefield添加到自定义登录表单中。在

^{pr2}$

在一个./manage.py runserver上写着Module "core.forms" does not define a "SignupForm" class。我已经在中定义了一个注册表单核心.forms如下和signup will work if CoreLoginForm is inherited from forms.Form instead of LoginForm。所以如果我这么做

class CoreLoginForm(forms.Form):
    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop('request', None)
        super(CoreLoginForm, self).__init__(*args, **kwargs)

    role = forms.ChoiceField(widget=forms.Select(), choices=User.roles, initial=User.roles[0])

我可以呈现自定义登录表单到html页面。但这里的问题是我必须重新定义类中的每个方法,包括authenticate()perform_login()等,这将导致复制整个LoginForm并将其粘贴到中表单.py应用程序的。我不想这样做,因为我认为这是违反干原则。有没有一种简单的方法可以将自定义字段添加到自定义loginform并重写login()方法?在

TIA公司


Tags: 方法用户pycore模型self表单login
1条回答
网友
1楼 · 发布于 2024-04-23 12:05:01

也许你已经解决了你的问题,但我会把这个解决方案留给其他像我这样花了10分钟以上时间的人:)

我找到了一个简单的方法来添加一个字段到Allauth登录表单:

如你所做的-添加到设置.py公司名称:

ACCOUNT_FORMS = {'login': 'core.forms.CoreLoginForm'}

之后在你的表单.py您需要添加:

^{pr2}$

相关问题 更多 >