确保用户在进入下一个表格之前已完成上一个表格

Ensuring Users Have Completed Prior Form Before Progressing To The Next Form

我收到了一份大型调查问卷供用户填写。因为它太大了,我决定将它分成三个连续的页面上的三个单独的表格。

网址为:questionnaire/section_1、questionnaire/section_2、questionnaire/section_3。

提交每个表单后,表单数据将保存到数据库中,在最终(第 3 个)表单之后,三个表单将保存为该用户的单个 pdf。用户完成三个问卷中的每一个都很重要。

我的问题是用户将能够使用地址栏键入 www.website/questionnaire/section_3 并仅完成第三部分,跳过前两部分并提交不完整的问卷。

我想不出任何方法来限制用户访问表单的后面部分,直到前面的部分被成功验证并保存。

PS - 我考虑过为三个表单分别设置权限,一旦用户提交了一个表单就为用户添加权限,但我觉得这很 hacky??

谢谢。

这就是我最终处理这个问题的方式。

@allowed_users(allowed_roles=['admin', 'registered_user'])
def page_two(request):

    if request.method == 'POST':
        form = FormTwoForm(request.POST, request.FILES, instance=request.user.formtwo)
        if form.is_valid():
            form.save()

            return redirect('page_three')
    else:
        # redirect if user didnt access the page from personal_information
        if(request.META.get('HTTP_REFERER') != request.build_absolute_uri(reverse('form_one'))):
            return redirect('form_one')

        else:
            form = FormTwoForm(instance=request.user.formtwo)

    context = {
        'form' : form
    }

    return render(request, 'example/form_two.html', context)



@allowed_users(allowed_roles=['admin', 'registered_user'])
def form_three(request):

    if request.method == 'POST':
        form = FormThreeForm(request.POST, request.FILES, instance=request.user.formthree)
        if form.is_valid():
           form.save()

           return redirect('form_four')
    else:
        # redirect if user didnt access the page from needs_analysis
        if(request.META.get('HTTP_REFERER') != request.build_absolute_uri(reverse('form_two'))):
            return redirect('form_two')

        form = FormThreeForm(instance=request.user.formthree)

    context = {
        'form' : form
    }

    return render(request, 'example/form_four.html', context)