Django汇总了反向关系

时间:2015-04-07 16:39:36

标签: python django sum aggregates

这与this question有关,但略有不同。

为简单起见,假设我有模型(使用Django 1.7):

class TimesheetEntry(models.Model):
    date = models.DateField()
    employee = models.CharField(max_length=255)
    hours = models.FloatField()

class OnCallEntry(models.Model)
    timesheet = models.ForeignKey(TimesheetEntry)
    minutes = models.FloatField()
    comment = models.CharField(max_length=255)

对于特定的TimesheetEntry / day,可以有多个OnCallEntries,每个OnCallEntries都具有通话时间。我想查询员工工作的所有小时数以及通话时间总计。

要做到这一点,我有查询:

query = TimesheetEntry.objects.all().filter(employee="John Smith").aggregate(
            total_hours = Sum('hours'),
            total_oncall_minutes = Sum('oncallentry__minutes')
        )

但是,当给定的TimesheetEntry有多个OnCallEntry时,单个TimesheetEntry的小时数乘以OnCallEntries的数量,导致total_hours Sum变得倾斜。 (据我所知,这是由于django处理连接的方式)。当我不包括total_oncall_minutes部分时,它按预期工作。

对于total_hours部分,我只想获得不同TimesheetEntries的Sum。我宁愿在一个查询中完成所有操作,因为实际上我还有更多我想要执行的聚合函数,以及其他相关模型。

我尝试了在ex:

中添加distinct关键字的所有变体
...Sum('hours', distinct=True)..
...Sum('oncallentry__minutes', distinct=True)..
...filter(employee="John Smith").distinct().aggregate(...

但这些似乎没有用。任何帮助将不胜感激!

由于

0 个答案:

没有答案