我正在尝试实现的登录组成一个自定义用户模型。是否可以从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.ModelBackend
和allauth.account.auth_backends.AuthenticationBackend
之外,我没有使用任何身份验证后端。自定义注册是工作良好的我没有任何问题。但是自定义loginform并没有呈现用户模型中的所有字段。根据此SO Post中接受的答案继承Allauth LoginForm,并将choicefield添加到自定义登录表单中。在
在一个./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公司
也许你已经解决了你的问题,但我会把这个解决方案留给其他像我这样花了10分钟以上时间的人:)
我找到了一个简单的方法来添加一个字段到Allauth登录表单:
如你所做的-添加到设置.py公司名称:
之后在你的表单.py您需要添加:
^{pr2}$相关问题 更多 >
编程相关推荐