From 0fff47c90f01c33ffdd0e8ed8c4a623693b7d4dd Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Sat, 11 Apr 2009 12:09:34 +0000 Subject: [PATCH] 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 --- django/db/models/sql/query.py | 3 +++ tests/regressiontests/aggregation_regress/models.py | 5 +++++ 2 files changed, 8 insertions(+) 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 """ }