On Wed, Oct 7, 2009 at 1:13 PM, Paddy Joy <[email protected]> wrote:
>
> Can anyone help out with the following aggregation clause? I have an
> invoice and invoice_item models as shown.
>
> class Invoice(models.Model):
>
>    customer =  models.ForeignKey(Customer)
>    payments_received = models.FloatField(default=0)
>
> class Invoice_Item(models.Model):
>
>    invoice =  models.ForeignKey('Invoice')
>    sub_total = models.DecimalField(blank=True, null=True,
> max_digits=9, decimal_places=2)
>
> I create one invoice with 2 items
>
> i = Invoice(customer=c, payments_received=260)
> i.save()
>
> it = Invoice_Item(invoice=1, sub_total=200)
> it.save()
> it = Invoice_Item(invoice=1, sub_total=60)
> it.save()
>
>
> When performing an aggregate with one Sum the Sum of payments_received
> field is correct
>
>>>> account_balance = 
>>>> Invoice.objects.filter(customer=c).aggregate(Sum('payments_received'))
>>>> account_balance
> {'payments_received__sum': 260.0}
>
> However when I add an additional item to the aggregate clause the
> payments_received is doubled.
>
>>>> account_balance = 
>>>> Invoice.objects.filter(customer=c).aggregate(Sum('invoice_item__sub_total'),
>>>>  Sum('payments_received'))
>>>> account_balance
> {'payments_received__sum': 520.0, 'invoice_item__sub_total__sum':
> Decimal("260.00")}
>
> I expected the payments_received sum to always stay the same, is my
> understanding of aggregation flawed?

You've discovered is ticket #10060. It's a nasty bug that won't be
easy to solve - see the ticket for details.

For the moment, the workaround is to do two queries rather than one.

Yours
Russ Magee %-)

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to