Django:仅当用户提交了表单或保存了模型后,才允许用户进一步访问

时间:2019-03-05 14:01:17

标签: django django-models django-views

用户在注册后即会通过某些表格。每个表单页面下方都有注销链接。仅在保存了每个表格后,我才希望使用户进一步访问该网站。现在,就我而言,我有以下模型:

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

如何应用此方法,以便在用户保存此模型后将其重定向到家。否则,她必须在下次登录时填写表格吗?

在我的情况下,当用户尚未填写所有表格时,她仍然可以通过注销来访问;并且在登录时直接进入主页。并且表单未保存。我该怎么做?

2 个答案:

答案 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_receiptAccountDriving_licenseCard_detail模型,因为我需要新用户按顺序填写这些模型的所有表格在注册后。如果他/她在填写这些表格时随时注销,则他/他将在登录后重定向到空白表格。

如果每个模型都有数据,并且/或者如果用户未通过身份验证或匿名,则他/她将被重定向到home