如何根据数据库值

时间:2017-08-29 17:38:18

标签: django django-views

我想为两个条件使用一个视图(URL)。

在我的应用程序中,“所有者”为他们管理的路线创建每日计划,并在一天内更新计划/结果。

class DailyRoute(models.Model):
    owner = models.ForeignKey(Owner)
    route = models.ForeignKey(Route)
    driver = models.ForeignKey(Driver)
    stops = models.PositiveSmallIntegerField(default=0, ...
    on_duty_hours = models.TimeField(default=datetime.time...
    date = models.Datefield(...
    finalized = models.Boolean(...

基本上,有3个数据库条件,其中2个我正在尝试用于视图:

  1. 日期/路线没有数据库行。这意味着所有者尚未创建当天的计划。 (例如,如果DailyRoute.objects.filter(stage = 0).count()== 0:...)

  2. 日期/路线的数据库行,其中finalized = False。这意味着已为日期/路线对创建了一个计划,并且可以对其进行编辑。 (例如DailyRoute.objects.filter(stage = 0).count()> 0)

  3. 日期/路线的数据库行,其中finalized = True。这意味着当天的计划/更新已完成,不允许进一步编辑。 (例如,如果DailyRoute.objects.filter(stage = 1).count()> 0:...)

  4. 作为日常活动,我希望用户转到某个网址(例如/ account / daily),然后会看到其中一个视图:

    a)如果没有所有者路线(上面的第1点),则提供“添加”按钮,为特定日期(即下一个工作日)的每个拥有路线添加一行。成功时,按照下面的b)显示DailyRoute List。

    b)如果所有者路线存在于0状态,则显示该列表(即不显示“添加”按钮。)

    请注意,所有者永远不能在0状态下拥有多个日期/路由对。他们必须在0州的路线上完成当天的活动才能规划下一天的路线。

    或者,如果路径处于0状态,则可以使用具有禁用的“添加”按钮的视图和路由列表。相反,如果没有找到路线,将启用“添加”按钮和一个空的路由列表。

    现在我可以使用单独的URL执行此操作,一个用于添加每日计划,另一个用于显示stage = 0中的路由列表,但在同一个URL上执行此操作会更好。

    我无法弄清楚如何/在哪里添加过滤器到视图来执行此操作。 提前感谢您的指导。

1 个答案:

答案 0 :(得分:-1)

嗯,听起来像一个简单的if/else语句可以解决这个问题:

class YourView(View):
    if first_condition:
        return render('first_template')
    else if second_condition:
        return render('second_template')
    else:
        return render('third_template')

或者,如果您想使用一个模板,可以在模板中执行此操作if/else。我还建议您从您的视图中发送该标志:

class YourView(View):
    ...
    routes_exist = DailyRoute.objects.filter(stage = 0).exists()
    return render('template.html', {'routes_exist': routes_exist})

然后在你的模板中:

{% if routes_exsist %}

    <button> Add </button>

{% endif %] 

希望它有所帮助!