这与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(...
但这些似乎没有用。任何帮助将不胜感激!
由于