我的印象是以下在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)