summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorRussell Keith-Magee <russell@keith-magee.com>2011-01-16 08:03:25 +0000
committerRussell Keith-Magee <russell@keith-magee.com>2011-01-16 08:03:25 +0000
commitae8ff5f476973d5623675460d36a2f3c6853f6d0 (patch)
treee4b5cfe71d0e0f076f78735ef7eac7dd4d900df9 /tests
parentb4f0921463956215c9852398df2674262ac7548e (diff)
Fixed #14707 -- Relax the protections on aggregate naming collisions when a ValuesQuerySet removes the colliding name. Thanks to Andy McKay for the report.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@15223 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests')
-rw-r--r--tests/regressiontests/aggregation_regress/tests.py22
1 files changed, 22 insertions, 0 deletions
diff --git a/tests/regressiontests/aggregation_regress/tests.py b/tests/regressiontests/aggregation_regress/tests.py
index ec2603fe1e..989c4c3d90 100644
--- a/tests/regressiontests/aggregation_regress/tests.py
+++ b/tests/regressiontests/aggregation_regress/tests.py
@@ -474,6 +474,28 @@ class AggregationTests(TestCase):
# 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_values_queryset_non_conflict(self):
+ # Regression for #14707 -- If you're using a values query set, some potential conflicts are avoided.
+
+ # age is a field on Author, so it shouldn't be allowed as an aggregate.
+ # But age isn't included in the ValuesQuerySet, so it is.
+ results = Author.objects.values('name').annotate(age=Count('book_contact_set'))
+ self.assertEquals(len(results), 9)
+ self.assertEquals(results[0]['name'], u'Adrian Holovaty')
+ self.assertEquals(results[0]['age'], 1)
+
+ # Same problem, but aggregating over m2m fields
+ results = Author.objects.values('name').annotate(age=Avg('friends__age'))
+ self.assertEquals(len(results), 9)
+ self.assertEquals(results[0]['name'], u'Adrian Holovaty')
+ self.assertEquals(results[0]['age'], 32.0)
+
+ # Same problem, but colliding with an m2m field
+ results = Author.objects.values('name').annotate(friends=Count('friends'))
+ self.assertEquals(len(results), 9)
+ self.assertEquals(results[0]['name'], u'Adrian Holovaty')
+ self.assertEquals(results[0]['friends'], 2)
+
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'))