/ / Використання майстра форм як форма реєстрації django allauth - django, django-forms, django-allauth

Використання майстра форми як форма реєстрації django aluatu - django, django-forms, django-allaut

Я намагаюся реалізувати майстра форм під час реєстрації / реєстрації. я використовую django-allauth для автентифікації та на основі документів та попереднього питання Як налаштувати профіль користувача при використанні django-allauth У ньому описано, як додати додаткові поля до знакадо форми. Я дійсно не бачу, як я можу перевизначити форму за замовчуванням для використання майстра форм. Один із варіантів, який я розглядав, це додати всі додаткові поля до форми реєстрації, потім відобразити розділ форм з ajax, але я не впевнений, як реалізувати Будь-які вказівки або допомога щодо здійснення кроку реєстрації як a майстра був би дуже вдячний.

Відповіді:

1 для відповіді № 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, який створює новий об'єкт UserProfile з відношенням один-до-одного до Користувача. Обидва об'єкти зберігаються лише після успішного надсилання обох форм. Функція complete_signup є з allauth, і вона робить деяке очищення, а потім реєструє користувача на сайті.


0 для відповіді № 2

Я в кінцевому підсумку реалізації майстра з боку клієнта, використовуючи AngularJS Django-кутовий пакет і ця бібліотека. Після копання allauth код реєстрації перегляду, я зрозумів, що він вже реалізований AjaxCapableProcessFormViewMixin

Реалізація майстра з використанням коду на стороні клієнта для процесу реєстрації при використанні django-allauth це, мабуть, найкращий спосіб піти, оскільки ви можете відкласти успішне перенаправлення, поки всі форми майстра не будуть заповнені, а також запобігає розбиванню довгих форм реєстрації на менші форми.