编写条件 Django 视图

Writing Conditional Django Views

为了克服项目中的一些挑战,我整天都在绞尽脑汁。我有一个当前是 ListView 的视图,但我也需要显示条件逻辑,而且我对 Django 太菜鸟了,我不确定要问的问题。

在我的模板中显示列表是比较容易的部分,但是如果您查看下面的代码,我还定义了一个中心文本 total_sales 来聚合 'sales' 列的总和 - 这也有效。我需要的是能够显示 Sum if 'day_of_week' 字段 == "Monday" 或 if 中的任何其他星期几 声明。

更新:抱歉,我意识到我的问题没有包含足够的信息。 'day_of_week' 是流量模型中的一个字段,我想显示 'sales' 字段的总和,但前提是 'day_of_week' 等于特定日期。我是 Django 的新手,虽然我知道如何编写 if 语句,但我完全不确定如何在这种情况下将它们放在我的视图中,以便我可以在我的模板中呈现总计。

有没有办法在我目前设置的视图中写入条件数据?谢谢你的时间。

class TrafficListView(ListView):
    model = Traffic
    template_name = 'dashboard/pages/traffic.html'

    def get_context_data(self, **kwargs):
        context = super(TrafficListView, self).get_context_data(**kwargs)
        context['total_sales'] = Traffic.objects.all().aggregate(Sum('sales')).get('sales__sum', 0.00)
        return context

由于您需要显示一周中每一天的总销售额,而不是上面评论中提到的特定日期,您可以执行以下操作:

class TrafficListView(ListView):
    model = Traffic
    template_name = 'dashboard/pages/traffic.html'

    def get_context_data(self, **kwargs):
        context = super(TrafficListView, self).get_context_data(**kwargs)
        days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday','Sunday'] # days of the week
        total_sales = {} # create an empty dictionary 
        for day in days:
            # get the sales for that particular day 
            total_sales[day] = Traffic.objects.filter(day_of_week=day).aggregate(Sum('sales')).get('sales__sum', 0.00)
        context['total_sales'] = total_sales # pass 'total_sales' dictionary in context
        return context

在这里,我们创建了一个列表 days,其值从 MondaySunday。然后我们创建一个空字典total_sales

我们现在将遍历 days 列表并过滤 Traffic 模型中的所有对象,其中 day_of_week 等于该特定日期。 让我们说 Monday。然后我们对 day_of_week 返回的对象执行 Sum 聚合,作为 sales 字段上的 Monday。从 sales_sum 返回的值存储在 total_sales 字典的键 Monday 中。因此,在迭代完成后,total_sales 中将有 7 个键表示一周中的每一天,其值为该特定日期的销售额总和。

在您的模板中,使用{{total_sales.Monday}}访问Monday销售,{{total_sales.Tuesday}}访问Tuesday销售等。