我一直在绞尽脑汁想要在我的项目中克服一些挑战。我有一个目前是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
答案 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
,其值为Monday
到Sunday
。然后我们创建一个空字典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
等等。