summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRussell Keith-Magee <russell@keith-magee.com>2009-04-11 12:09:34 +0000
committerRussell Keith-Magee <russell@keith-magee.com>2009-04-11 12:09:34 +0000
commit0fff47c90f01c33ffdd0e8ed8c4a623693b7d4dd (patch)
tree25eb27207192f251f1a2657a4a30ae1f4ec34526
parentb1a5db37e6631ab4a964d7f8d52dfe593f9e6c4b (diff)
Fixed #10766 -- Raise an error when annotate() references another aggreagte(). Thanks to aseering@mit.edu for the report.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@10521 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/db/models/sql/query.py3
-rw-r--r--tests/regressiontests/aggregation_regress/models.py5
2 files changed, 8 insertions, 0 deletions
diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py
index 256cbef8e1..403968e118 100644
--- a/django/db/models/sql/query.py
+++ b/django/db/models/sql/query.py
@@ -1403,6 +1403,9 @@ class BaseQuery(object):
field_name = field_list[0]
col = field_name
source = self.aggregates[field_name]
+ if not is_summary:
+ raise FieldError("Cannot compute %s('%s'): '%s' is an aggregate" % (
+ aggregate.name, field_name, field_name))
elif ((len(field_list) > 1) or
(field_list[0] not in [i.name for i in opts.fields]) or
self.group_by is None or
diff --git a/tests/regressiontests/aggregation_regress/models.py b/tests/regressiontests/aggregation_regress/models.py
index 3ce0f6e75d..a6f99a997d 100644
--- a/tests/regressiontests/aggregation_regress/models.py
+++ b/tests/regressiontests/aggregation_regress/models.py
@@ -297,6 +297,11 @@ FieldError: Cannot resolve keyword 'foo' into field. Choices are: authors, conta
>>> HardbackBook.objects.annotate(n_authors=Count('authors')).values('name','n_authors')
[{'n_authors': 2, 'name': u'Artificial Intelligence: A Modern Approach'}, {'n_authors': 1, 'name': u'Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp'}]
+# Regression for #10766 - Shouldn't be able to reference an aggregate fields in an an aggregate() call.
+>>> Book.objects.all().annotate(mean_age=Avg('authors__age')).annotate(Avg('mean_age'))
+Traceback (most recent call last):
+...
+FieldError: Cannot compute Avg('mean_age'): 'mean_age' is an aggregate
"""
}