/ / Usando um assistente de formulário como Formulário de inscrição django allauth - django, django-forms, django-allauth

Usando um assistente de formulário como Formulário de inscrição django allauth - django, django-forms, django-allauth

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 № 1

Recentemente 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.