用户在注册后即会通过某些表格。每个表单页面下方都有注销链接。仅在保存了每个表格后,我才希望使用户进一步访问该网站。现在,就我而言,我有以下模型:
class Driving_plan(models.Model):
plan = models.CharField (max_length=25, blank=False)
duration = models.CharField(max_length=15)
annual_fee = models.DecimalField(max_digits=4, decimal_places=2, default=50.00)
....
class Payment_receipt(models.Model):
driving_plans = models.ForeignKey(Driving_plan, on_delete=models.CASCADE)
user = models.ForeignKey(User, on_delete=models.CASCADE)
start_date = models.DateField(auto_now=False, auto_now_add=False)
end_date = models.DateField(auto_now=False, auto_now_add=False)
当用户选择Driving_plan
的实例时,此数据通过以下视图保存在Payment_receipt
模型中:
@login_required
def passPlanPKView(request, pk):
plan = Driving_plan.objects.get(pk = pk)
Pay = Payment_receipt.objects.create(
driving_plans=plan,
user = request.user,
start_date=datetime.date.today(),
end_date= calcEnddate(plan),
)
return redirect('add_user_profile')
如何应用此方法,以便在用户保存此模型后将其重定向到家。否则,她必须在下次登录时填写表格吗?
在我的情况下,当用户尚未填写所有表格时,她仍然可以通过注销来访问;并且在登录时直接进入主页。并且表单未保存。我该怎么做?
答案 0 :(得分:0)
您可以使用模型字段来验证是否向用户提交了必要的详细信息。您无法跟踪是否已提交的天气表
答案 1 :(得分:0)
我使用.exists()
解决了这个问题。我正在用一种新的观点进行解释,不需要查找与我的问题中的passPlanPKView
的相似之处。
我的观点:
def homeview(request):
if request.user.is_authenticated:
if not Payment_receipt.objects.filter(user = request.user).exists():
return redirect('plan_select')
if not Account.objects.filter(user = request.user).exists():
return redirect('add_user_profile')
if not Driving_license.objects.filter(user = request.user).exists():
return redirect('add_license')
if not Card_detail.objects.filter(user = request.user).exists():
return redirect('add_card')
return render(request, 'services/home.html')
在这里,对于经过身份验证的用户,我正在查询每个表/模型,以检查用户是否已通过表单在该模型中填写了数据。如果使用者刚刚签了名却没有填写任何表格就登出,他/他将被要求再次填写这些表格。
我要依次检查Payment_receipt
,Account
,Driving_license
,Card_detail
模型,因为我需要新用户按顺序填写这些模型的所有表格在注册后。如果他/她在填写这些表格时随时注销,则他/他将在登录后重定向到空白表格。
如果每个模型都有数据,并且/或者如果用户未通过身份验证或匿名,则他/她将被重定向到home
。