Django - 注释多个 Sum() 对象会给出错误的结果

kyo*_*ore 5 django django-models django-queryset

models.py看起来像这样

class Channel(Model):
    name = CharField()

class Contract(Model):
    channel = ForeignKey(Channel, related_name='contracts')
    fee = IntegerField()

class ContractPayment(Model):
    contract = ForeignKey(Contract, related_name='payments')
    value = IntegerField()
Run Code Online (Sandbox Code Playgroud)

当我查询模型时:

Channel.objects.annotate(pay=Sum('contracts__fee'))

它返回:75000。它是正确的,但是当我这样查询时:

Channel.objects.annotate(pay=Sum('contracts__fee'))
               .annotate(paid=Sum('contracts__payments__value'))
Run Code Online (Sandbox Code Playgroud)


它返回:pay: 96000,paid: 33000。如您所见,薪酬已更改。这里发生了什么?我读了票#10060但没有运气。

Hor*_*lea 0

使用两个查询来获得所需的结果:

Channel.objects.annotate(pay=Sum('contracts__fee'))
Run Code Online (Sandbox Code Playgroud)

Channel.objects.annotate(paid=Sum('contracts__payments__value'))
Run Code Online (Sandbox Code Playgroud)