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



我有一个大型问卷供用户完成。因为它太大了,我决定在连续的三页上将其分成三种不同的形式。

网址是:问卷/section_1、问卷/section_2、问卷/section_3。

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

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

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

PS - 我考虑过为三个表单中的每一个设置权限,一旦用户提交一个表单就向他们添加权限,但我觉得这很黑客??

谢谢。

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

@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)

最新更新