【发布时间】:2016-07-10 08:24:48
【问题描述】:
我有非常大的数据集并且还在不断增长,我需要创建许多过滤器,但它很快就会失控,我希望有人可以帮助我将一些查询合并到一个调用中。下面是我的观点的开始。
调用 #1 - for 循环以显示所有结果的表格
traffic = Traffic.objects.all()
调用 #2 - 组合聚合总和查询
totals = Traffic.objects.aggregate(Sum('sessions'), Sum('new_users'), Sum('reminder'), Sum('campaigns'), Sum('new_sales'), Sum('sales_renewals'))
total_sessions = totals.get('sessions__sum')
total_new_users = totals.get('new_users__sum')
total_reminder = totals.get('reminder__sum')
total_campaigns = totals.get('campaigns__sum')
total_new_sales = totals.get('new_sales__sum')
total_sales_renewals = totals.get('sales_renewals__sum')
调用 #3、#4、#5、#6 等等... - 按月份和星期几过滤数据库
total_sessions_2014_m = Traffic.objects.filter(created__year='2014', created__week_day=2).aggregate(Sum('sessions'))
total_sessions_2014_m = Traffic.objects.filter(created__year='2014', created__week_day=3).aggregate(Sum('sessions'))
total_sessions_2014_m = Traffic.objects.filter(created__year='2014', created__week_day=4).aggregate(Sum('sessions'))
total_sessions_2014_m = Traffic.objects.filter(created__year='2014', created__week_day=5).aggregate(Sum('sessions'))
total_sessions_2014_m = Traffic.objects.filter(created__year='2014', created__week_day=6).aggregate(Sum('sessions'))
问题是,我需要再创建几十个过滤器,因为我有 3 年的数据,每列有多个数据点,我们需要总计总和。
问题:
- 我可以将调用 #1 合并到调用 #2
- 我是否可以使用 Call #2 来查询 call#3 的总和,这样我就不必调用数据库中的所有对象来过滤它,然后再执行几十次?
如您所见,这将很快失控。任何帮助将不胜感激。谢谢。
更新添加 流量模型
class Timestamp(models.Model):
created = models.DateField()
class Meta:
abstract = True
class Traffic(Timestamp):
sessions = models.IntegerField(blank=True, null=True)
new_users = models.IntegerField(blank=True, null=True)
reminder = models.IntegerField(blank=True, null=True)
campaigns = models.IntegerField(blank=True, null=True)
new_sales = models.IntegerField(blank=True, null=True)
sales_renewals = models.IntegerField(blank=True, null=True)
# Meta and String
class Meta:
verbose_name = 'Traffic'
verbose_name_plural = 'Traffic Data'
def __str__(self):
return "%s" % self.created
【问题讨论】:
-
所有这些数据是否一次显示在模板上?
-
您能否通过添加
Traffic模型来更新您的问题? -
@ParagTyagi-morpheus- 是的,这些将在同一个视图中。它是我内部营销部门的工具,将由我们的内部服务器提供服务。这只是冰山一角,我有大量数据要从 Excel 中移动,因此不能选择不同的视图。刚刚更新了我的
traffic模型。
标签: python django python-3.x django-templates django-views