django ORM问题-注释和聚合返回不一致的值

django ORM问题-注释和聚合返回不一致的值,django,django-orm,django-aggregation,Django,Django Orm,Django Aggregation,我发现一个设置,其中aggregate()和annotate()不返回相同的值。。。我真的很困惑。 我有以下型号: class Invoice(models.Model): pass class InvoiceItem(models.Model): invoice = models.ForeignKey(Invoice, related_name="items") amount = models.PositiveIntegerField(null=False, blan

我发现一个设置,其中
aggregate()
annotate()
不返回相同的值。。。我真的很困惑。

我有以下型号:

class Invoice(models.Model):
    pass

class InvoiceItem(models.Model):
    invoice = models.ForeignKey(Invoice, related_name="items")
    amount = models.PositiveIntegerField(null=False, blank=False, default=1)
    price = models.DecimalField(max_digits=10, decimal_places=2, null=False, blank=False, default=0)
    begin = models.DateField(null=True, blank=True)
当我想要获得一个时间跨度内的总收入时,我有以下查询:

revenue = Invoice.objects.annotate(
               first_date=Min('items__begin')).filter(
               first_date__range=[start_date, end_date]).aggregate(
               revenue=Sum(F('items__amount') * F('items__price'),               
                           output_field=FloatField()))['revenue']
我尝试对
annotate()
执行相同的操作,只是为了验证结果:

revenue_list = Invoice.objects.annotate(
                  first_date=Min('items__begin')).filter(
                  first_date__range=[start_date, end_date]).annotate(
                  revenue=Sum(F('items__amount') * F('items__price'),               
                              output_field=FloatField()))
现在,当我在元素上循环并手动求和
revenue
时,我得到的值与
revenue
不同

有什么想法吗?不幸的是,在聚合之后,您无法再检查原始查询

谢谢


PS:我用SQL手动检查了这些值<代码>注释是正确的…

好的,我找到了一个解决方案
distinct()
values()
不起作用,但将乘法移动到第二个
注释

revenue =  Invoice.objects.annotate(
               first_date=Min('items__begin')).filter(
               first_date__range=[start_date, end_date]).annotate(
               revenue_invoice=Sum(F('items__amount') * F('items__price'),
                                   output_field=FloatField())).aggregate(
               revenue=Sum('revenue_invoice', output_field=FloatField()))['revenue']
也许这对其他人有帮助