如何覆盖 django 注册视图类



我想覆盖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' 

有关详细信息,请参阅文档。

最新更新