diff options
| author | Carl Meyer <carl@oddbird.net> | 2010-10-10 08:04:14 +0000 |
|---|---|---|
| committer | Carl Meyer <carl@oddbird.net> | 2010-10-10 08:04:14 +0000 |
| commit | 2f17dd3dd0fdcecf179375af32983a952bd7dfd9 (patch) | |
| tree | c50bdba3f07a365edf9bc113cc9896bede32a544 | |
| parent | ace6519fae94c83aaaee0e6ce04d3bdded1b91d5 (diff) | |
Refs #11256 -- Extended the annotation field name conflict check to cover m2ms and reverse related descriptors as well. This is needed to actually cover the case raised by #14373.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@14116 bcc190cf-cafb-0310-a4f2-bffc1f526a37
| -rw-r--r-- | django/db/models/query.py | 2 | ||||
| -rw-r--r-- | tests/regressiontests/aggregation_regress/tests.py | 8 |
2 files changed, 9 insertions, 1 deletions
diff --git a/django/db/models/query.py b/django/db/models/query.py index 7d41fe1ca6..5969ab128c 100644 --- a/django/db/models/query.py +++ b/django/db/models/query.py @@ -625,7 +625,7 @@ class QuerySet(object): % arg.default_alias) kwargs[arg.default_alias] = arg - names = set([f.name for f in self.model._meta.fields]) + names = set(self.model._meta.get_all_field_names()) for aggregate in kwargs: if aggregate in names: raise ValueError("The %s annotation conflicts with a field on " diff --git a/tests/regressiontests/aggregation_regress/tests.py b/tests/regressiontests/aggregation_regress/tests.py index 786431420d..58d0b2748f 100644 --- a/tests/regressiontests/aggregation_regress/tests.py +++ b/tests/regressiontests/aggregation_regress/tests.py @@ -489,6 +489,14 @@ class AggregationTests(TestCase): # Regression for #11256 - providing an aggregate name that conflicts with a field name on the model raises ValueError self.assertRaises(ValueError, Author.objects.annotate, age=Avg('friends__age')) + def test_m2m_name_conflict(self): + # Regression for #11256 - providing an aggregate name that conflicts with an m2m name on the model raises ValueError + self.assertRaises(ValueError, Author.objects.annotate, friends=Count('friends')) + + def test_reverse_relation_name_conflict(self): + # Regression for #11256 - providing an aggregate name that conflicts with a reverse-related name on the model raises ValueError + self.assertRaises(ValueError, Author.objects.annotate, book_contact_set=Avg('friends__age')) + def test_pickle(self): # Regression for #10197 -- Queries with aggregates can be pickled. # First check that pickling is possible at all. No crash = success |
