summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRussell Keith-Magee <russell@keith-magee.com>2009-02-02 13:43:18 +0000
committerRussell Keith-Magee <russell@keith-magee.com>2009-02-02 13:43:18 +0000
commit8f410a577befddeff8639410a7a85d8e6d1c86e7 (patch)
treefa1e8febe2a2219453d78b34b2629cd055fd4ad1
parent65ad2132abd4c56f38c43b0ba9a23ed716733728 (diff)
Fixed #10127 -- Corrected handling of select_related() in annotate() calls. Thanks to Sylvain Pasche <sylvain.pasche@gmail.com> for the report and test case.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@9805 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/db/models/query.py4
-rw-r--r--django/db/models/sql/query.py2
-rw-r--r--tests/regressiontests/aggregation_regress/models.py5
3 files changed, 8 insertions, 3 deletions
diff --git a/django/db/models/query.py b/django/db/models/query.py
index 04a1c513f6..aa2034919c 100644
--- a/django/db/models/query.py
+++ b/django/db/models/query.py
@@ -280,8 +280,8 @@ class QuerySet(object):
for row in self.query.results_iter():
if fill_cache:
- obj, aggregate_start = get_cached_row(self.model, row,
- index_start, max_depth, requested=requested)
+ obj, _ = get_cached_row(self.model, row,
+ index_start, max_depth, requested=requested)
else:
# omit aggregates in object creation
obj = self.model(*row[index_start:aggregate_start])
diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py
index 4e46da6424..bf664c606e 100644
--- a/django/db/models/sql/query.py
+++ b/django/db/models/sql/query.py
@@ -698,7 +698,7 @@ class BaseQuery(object):
"""
qn = self.quote_name_unless_alias
result = []
- for col in self.group_by:
+ for col in self.group_by + self.related_select_cols:
if isinstance(col, (list, tuple)):
result.append('%s.%s' % (qn(col[0]), qn(col[1])))
elif hasattr(col, 'as_sql'):
diff --git a/tests/regressiontests/aggregation_regress/models.py b/tests/regressiontests/aggregation_regress/models.py
index d7dd7617e6..3e5f873472 100644
--- a/tests/regressiontests/aggregation_regress/models.py
+++ b/tests/regressiontests/aggregation_regress/models.py
@@ -194,6 +194,11 @@ FieldError: Cannot resolve keyword 'foo' into field. Choices are: authors, id, i
>>> Book.objects.annotate(num_authors=Count('authors')).order_by('publisher__name', 'name')
[<Book: Practical Django Projects>, <Book: The Definitive Guide to Django: Web Development Done Right>, <Book: Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp>, <Book: Artificial Intelligence: A Modern Approach>, <Book: Python Web Development with Django>, <Book: Sams Teach Yourself Django in 24 Hours>]
+# Regression for #10127 - Empty select_related() works with annotate
+>>> books = Book.objects.all().filter(rating__lt=4.5).select_related().annotate(Avg('authors__age'))
+>>> sorted([(b.name, b.authors__age__avg) for b in books])
+[(u'Artificial Intelligence: A Modern Approach', 51.5), (u'Practical Django Projects', 29.0), (u'Python Web Development with Django', 30.3...), (u'Sams Teach Yourself Django in 24 Hours', 45.0)]
+
"""
}