我想覆盖django全身份验证注册视图以输入额外的字段值。
在这种情况下,用户模型具有与公司模型组合的外部字段。
from allauth.account.views import SignupView as AllAuthSignupView
from .models import Company
class SignupView(AllAuthSignupView):
def save(self):
user = super(SignupView, self).save()
a_company = get_object_or_404(Company, name='A')
user.company = a_company
return user
但是,这仅保存用户名,密码,电子邮件。公司字段为空。我不想要建议更改公司模型中默认值的答案。这不是我试图解决这个问题的方式。
您可以简单地创建一个新表单来保存其他数据,而不是覆盖视图。例如:
companies = (
('comapny_name_1', 'ABC'),
('comapny_name_2', 'DEF'),
)
class SignupForm(forms.Form):
company = forms.ChoiceField(choices=companies)
def signup(self, request, user):
user.company = Company.objects.get(name=self.cleaned_data['company'])
user.save()
然后将表单路径添加到ACCOUNT_SIGNUP_FORM_CLASS
settings.py
:
ACCOUNT_SIGNUP_FORM_CLASS = 'path.to.SignupForm'
有关详细信息,请参阅文档。