首页 > 解决方案 > Error creating a multi-step form using Django session

问题描述

I'm currently working on building a multi-step registration form in Django. I followed the official documentation which can be seen here. Although the forms do not show any error, the user does not get created. Is there a problem I might be overlooking?

def signup_step_one(request):
    if request.user.is_authenticated:
        return HttpResponseRedirect(reverse('accounts:personal-signup'))
    else:
        if request.method == 'POST':
            form = CustomUserCreationForm(request.POST)
            if form.is_valid():
                # collect form data in step 1
                email = form.cleaned_data['email']
                password = form.cleaned_data['password1']

                # create a session and assign form data variables
                request.session['email'] = email
                request.session['password'] = password
                
                return render(request, 'personal-signup-step-2.html', context={
                    'form': form,
                    "title": _('Create your personal account | Step 1 of 2'),
                })
        else:
            form = CustomUserCreationForm()
    return render(request, 'personal-signup-step-1.html', {
        "title": _('Create your personal account | Step 1 of 2'),
        'form': form,
    })


def signup_step_two(request):
    # create variables to hold session keys
    email = request.session['email']
    password = request.session['password']

    if request.method == 'POST':
        form = CustomUserCreationForm(request.POST)
        if form.is_valid():
            user = form.save(commit=False)
            user.email = email
            user.set_password(password)
            user.first_name(form.cleaned_data['first_name'])
            user.last_name(form.cleaned_data['last_name'])
            user.save()
            print('user created')
        return HttpResponse('New user created')
    else:
        form = CustomUserCreationForm()
    return render(request, 'personal-signup-step-2.html', {
        "title": _('Create your account | Step 2 of 2'),
        'form': form,
    })

标签: djangodjango-formsdjango-formwizard

解决方案


我注意到 signup_step_two 函数中的以下行将始终返回消息“新用户已创建”,即使表单无效:

  return HttpResponse('New user created')

将上面的行放在 if 语句中。还要在 else 语句或模板内打印 form.errors 以检查问题。前任:

    if form.is_valid():
        # create the user
        return HttpResponse('New user created')
    else:
        print(form.errors)

推荐阅读