使用表单向导作为注册表单django allauth

使用表单向导作为注册表单django allauth,django,django-forms,django-allauth,Django,Django Forms,Django Allauth,我正在尝试在注册/注册过程中实现表单向导。我正在使用django allauth进行身份验证,根据文档和前面的一个问题,它描述了如何在注册表单中添加额外字段。我真的不知道如何覆盖默认表单以使用表单向导。我考虑的一个选项是向注册表单添加所有额外字段,然后使用ajax显示表单的一部分,但我不确定如何在不同部分上实现验证。非常感谢您提供有关如何将注册步骤作为向导实施的任何指导或帮助。我最终使用AngularJS和从客户端实施了向导。在深入研究了allauthsignup视图代码之后,我发现它已经实现了

我正在尝试在注册/注册过程中实现表单向导。我正在使用
django allauth
进行身份验证,根据文档和前面的一个问题,它描述了如何在注册表单中添加额外字段。我真的不知道如何覆盖默认表单以使用表单向导。我考虑的一个选项是向注册表单添加所有额外字段,然后使用ajax显示表单的一部分,但我不确定如何在不同部分上实现验证。非常感谢您提供有关如何将注册步骤作为向导实施的任何指导或帮助。

我最终使用AngularJS和从客户端实施了向导。在深入研究了
allauth
signup视图代码之后,我发现它已经实现了一个
AjaxCapableProcessFormViewMixin


在使用django allauth时,使用客户端代码为注册过程实现向导可能是最好的方法,因为您可以将成功的重定向延迟到向导中的所有表单都已填写完毕,还可以防止将长注册表单拆分为较小的表单。

我最近通过以下方式实现了这一点:

views.py

from allauth.account.forms import SignupForm
from allauth.account.utils import complete_signup

SIGNUP_FORMS = [('signup', SignupForm),
                ('profile', forms.UserProfileForm)]

TEMPLATES = {'signup': 'trips/forms/wizard_form.html',
             'profile': 'trips/forms/wizard_form.html'}

class SignupWizard(SessionWizardView):
    def get_template_names(self):
        return [TEMPLATES[self.steps.current]]

    def done(self, form_list, **kwargs):
        for form in form_list:
            if isinstance(form, SignupForm):
                user = form.save(self.request)
                complete_signup(self.request, user, settings.ACCOUNT_EMAIL_VERIFICATION, settings.LOGIN_REDIRECT_URL)
            elif isinstance(form, forms.UserProfileForm):
                userprofile = form.save(commit=False)
                user = self.request.user
                userprofile.user = user
                userprofile.save()
        return HttpResponseRedirect(settings.LOGIN_REDIRECT_URL)

您可以添加任意数量的表单。在我的例子中,UserProfileForm是一个ModelForm,它创建了一个新的UserProfile对象,该对象与用户具有一对一的关系。只有在两个表单都成功提交后,才会保存这两个对象。完整注册功能来自allauth,它会进行一些清理,然后将用户登录到站点。

感谢上述解决方案。我不知道allauth提供的完整注册方法