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
This commit is contained in:
parent
65ad2132ab
commit
8f410a577b
|
@ -280,7 +280,7 @@ class QuerySet(object):
|
||||||
|
|
||||||
for row in self.query.results_iter():
|
for row in self.query.results_iter():
|
||||||
if fill_cache:
|
if fill_cache:
|
||||||
obj, aggregate_start = get_cached_row(self.model, row,
|
obj, _ = get_cached_row(self.model, row,
|
||||||
index_start, max_depth, requested=requested)
|
index_start, max_depth, requested=requested)
|
||||||
else:
|
else:
|
||||||
# omit aggregates in object creation
|
# omit aggregates in object creation
|
||||||
|
|
|
@ -698,7 +698,7 @@ class BaseQuery(object):
|
||||||
"""
|
"""
|
||||||
qn = self.quote_name_unless_alias
|
qn = self.quote_name_unless_alias
|
||||||
result = []
|
result = []
|
||||||
for col in self.group_by:
|
for col in self.group_by + self.related_select_cols:
|
||||||
if isinstance(col, (list, tuple)):
|
if isinstance(col, (list, tuple)):
|
||||||
result.append('%s.%s' % (qn(col[0]), qn(col[1])))
|
result.append('%s.%s' % (qn(col[0]), qn(col[1])))
|
||||||
elif hasattr(col, 'as_sql'):
|
elif hasattr(col, 'as_sql'):
|
||||||
|
|
|
@ -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.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>]
|
[<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)]
|
||||||
|
|
||||||
"""
|
"""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue