Estou tentando implementar um assistente de formulário no processo de registro / inscrição. estou usando django-allauth
para autenticação e com base nos documentos e em uma pergunta anterior Como personalizar o perfil do usuário ao usar django-allauth Descreve como adicionar campos extras ao sinalformulário. Realmente não vejo como substituir o formulário padrão para usar um assistente de formulário. Uma opção que eu estava considerando é adicionar todos os campos extras ao formulário de inscrição e exibir a seção dos formulários com ajax, mas não tenho certeza de como implementar validação nas diferentes seções. Qualquer orientação ou ajuda sobre como implementar a etapa de registro como Mago seria muito apreciada.
Respostas:
1 para resposta № 1Recentemente fiz isso por:
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)
Você pode adicionar quantos formulários desejar. No meu caso, o UserProfileForm é um ModelForm que cria um novo objeto UserProfile com um relacionamento individual com o Usuário. Ambos os objetos são salvos somente depois que ambos os formulários são enviados com êxito. A função complete_signup é de allauth e faz alguma limpeza e, em seguida, efetua login no site.
0 para resposta № 2
Acabei implementando o Assistente do lado do cliente usando AngularJS Pacote Django-angular e esta biblioteca. Depois de vasculhar o allauth
código de visualização de inscrição, eu descobri que ele já implementava um AjaxCapableProcessFormViewMixin
Implementando um assistente usando o código do lado do cliente para o processo de inscrição ao usar django-allauth
é provavelmente o melhor caminho a seguir, pois você pode atrasar o redirecionamento bem-sucedido até que todos os formulários no assistente sejam preenchidos e também impede a divisão de formulários longos de inscrição em formulários menores.