我正在尝试在注册/注册过程中实现表单向导。我使用django-allauth
进行身份验证,并基于文档和上一个问题How to customize user profile when using django-allauth它介绍了如何在注册表单中添加额外字段。我真的不知道如何覆盖默认表单以使用表单向导。我正在考虑的一个选项是将所有额外的字段添加到注册表单,然后使用ajax显示表单的部分,但我不确定如何在不同的部分上实现验证。任何关于如何以向导实施注册步骤的指导或帮助将不胜感激。
答案 0 :(得分:1)
我最近通过以下方式做到了这一点:
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,它创建一个与User一对一的新UserProfile对象。只有在成功提交两个表单后才会保存这两个对象。 complete_signup函数来自allauth,它会进行一些清理,然后将用户登录到站点。
答案 1 :(得分:0)
我最终使用AngularJS Django-angular package和this library从客户端实现了向导。在深入了解allauth
注册视图代码后,我发现它已经实现了AjaxCapableProcessFormViewMixin
使用django-allauth
时使用客户端代码为注册过程实现向导可能是最佳方法,因为您可以延迟成功重定向,直到向导中的所有表单都填满,并且还可以防止拆分长注册形成较小的形式。