diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py index 156617f8073..b961ac9eebe 100644 --- a/django/db/models/sql/query.py +++ b/django/db/models/sql/query.py @@ -250,11 +250,12 @@ class BaseQuery(object): if self.aggregate_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([ self.resolve_aggregate(value, aggregate) 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 diff --git a/tests/regressiontests/aggregation_regress/models.py b/tests/regressiontests/aggregation_regress/models.py index cb442148bdb..ca2447f5052 100644 --- a/tests/regressiontests/aggregation_regress/models.py +++ b/tests/regressiontests/aggregation_regress/models.py @@ -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')) {'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} """ }