在Django中与注释一起过滤 - 意外结果

时间:2016-08-19 15:52:54

标签: django

我的印象是以下在Django中是等效的:

qs = MyModel.objects.filter(some_field=123, another_field=456)

qs = MyModel.objects.filter(some_field=123).filter(another_field=456)

但是,我做了以下操作,产生了不同的结果:

qs = Award.objects.filter(transaction__accepted=True)
if query_date: #assume date is given
    qs = qs.filter(transaction__date__lte=query_date)
summary = qs.annotate(total=Sum('transaction__units')) # gives incorrect answer - double counts

与此相比

qs = Award.objects.filter(transaction__accepted=True)
                          transaction__date__lte=query_date)
summary = qs.annotate(total=Sum('transaction__units')) 

在最好的情况下,它会对单位进行双重计算。有人知道为什么会这样吗?一般规则是只使用一个过滤器和注释吗?

以下是我的模特。

class Award(models.Model):
    # some fields here


class Transaction(models.Model):
    units = models.IntergerField()
    date = models.DateField()
    award = models.ForeignKey(Award)

0 个答案:

没有答案