Fixed #10064 -- Corrected handling of aggregate queries that also use select_related(). Thanks to olivius for the report.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@9781 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Russell Keith-Magee 2009-01-20 12:23:48 +00:00
parent 728108883a
commit 39516803f1
2 changed files with 6 additions and 2 deletions

View File

@ -250,11 +250,12 @@ class BaseQuery(object):
if self.aggregate_select: if self.aggregate_select:
aggregate_start = len(self.extra_select.keys()) + len(self.select) aggregate_start = len(self.extra_select.keys()) + len(self.select)
aggregate_end = aggregate_start + len(self.aggregate_select)
row = tuple(row[:aggregate_start]) + tuple([ row = tuple(row[:aggregate_start]) + tuple([
self.resolve_aggregate(value, aggregate) self.resolve_aggregate(value, aggregate)
for (alias, aggregate), value for (alias, aggregate), value
in zip(self.aggregate_select.items(), row[aggregate_start:]) in zip(self.aggregate_select.items(), row[aggregate_start:aggregate_end])
]) ]) + tuple(row[aggregate_end:])
yield row yield row

View File

@ -147,6 +147,9 @@ FieldError: Cannot resolve keyword 'foo' into field. Choices are: authors, id, i
>>> Book.objects.aggregate(number=Max('pages'), select=Max('pages')) >>> Book.objects.aggregate(number=Max('pages'), select=Max('pages'))
{'number': 1132, 'select': 1132} {'number': 1132, 'select': 1132}
# Regression for #10064: select_related() plays nice with aggregates
>>> Book.objects.select_related('publisher').annotate(num_authors=Count('authors')).values()[0]
{'rating': 4.0, 'isbn': u'013790395', 'name': u'Artificial Intelligence: A Modern Approach', 'pubdate': datetime.date(1995, 1, 15), 'price': Decimal("82.8..."), 'id': 5, 'num_authors': 2, 'publisher_id': 3, 'pages': 1132}
""" """
} }