编写条件Django视图

时间:2015-07-20 08:52:10

标签: django python-3.x django-models django-templates django-views

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

在我的模板中显示列表很容易,但是如果你查看下面的代码,我还会定义一个centext total_sales来汇总'sales'列的总和 - 这也有效。我需要的是能够在 if 语句中显示Sum if 'day_of_week'字段==“星期一”或任何其他星期几。

更新:抱歉,我意识到我的问题没有包含足够的信息。 'day_of_week'是Traffic模型中的一个字段,我想显示'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

1 个答案:

答案 0 :(得分:1)

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

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。然后,我们对Sum字段day_of_week上为Monday返回的对象执行sales聚合。从sales_sum返回的值存储在Monday字典中的密钥total_sales中。因此,在迭代完成后,total_sales中的每一天将有7个键,其值为该特定日期的销售总和。

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