确保用户在进入下一个表格之前已完成上一个表格
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)
我收到了一份大型调查问卷供用户填写。因为它太大了,我决定将它分成三个连续的页面上的三个单独的表格。
网址为: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)