编写条件 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
,其值从 Monday
到 Sunday
。然后我们创建一个空字典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
销售等。
为了克服项目中的一些挑战,我整天都在绞尽脑汁。我有一个当前是 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
,其值从 Monday
到 Sunday
。然后我们创建一个空字典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
销售等。