确保用户在进入下一个表格之前已经完成了上一个表格的填写

问题描述 投票:0回答:1

我有一个大型的调查问卷供用户填写。因为它是如此之大,我决定把它分成三个独立的表格在三个连续的页面上。

网址是:questionnairesection_1, questionnairesection_2, questionnairesection_3。

在提交每张表格后,表格数据会被保存到数据库中,在最后(第三张)表格后,这三张表格会被保存为一个pdf格式,供该用户使用。其重要的是,用户要完成三个问卷中的每一个问卷。

我的问题是,用户将能够使用地址栏输入www.websitequestionnairesection_3,并只完成第三部分,跳过前两部分,提交一个不完整的问卷。

我想不出有什么办法可以限制用户访问表单的后面部分,直到前面的部分被成功验证和保存。

PS--我曾想过为三个表单分别设置权限,一旦用户提交了一个表单,就给用户增加权限,但我觉得这样做很黑吗?

谢谢你。

django django-forms django-urls
1个回答
0
投票

这是我最后处理的方式。

@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)
© www.soinside.com 2019 - 2024. All rights reserved.