summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Bronn <jbronn@gmail.com>2011-09-11 00:00:15 +0000
committerJustin Bronn <jbronn@gmail.com>2011-09-11 00:00:15 +0000
commita25413bf86e5e65129f8582a713a29308296c374 (patch)
treee1001ced4559d18f13f827db5883b238440f1a74
parent2918c3de74d1abe571b6c1eeb35e2899c39d880e (diff)
Fixed #15305 -- Made `Count` aggregate and `.values()` play nice together on `GeoQuerySets`. Thanks, vrehak for the bug report and milosu for initial patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@16797 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/contrib/gis/db/models/sql/compiler.py4
-rw-r--r--django/contrib/gis/tests/relatedapp/tests.py9
2 files changed, 8 insertions, 5 deletions
diff --git a/django/contrib/gis/db/models/sql/compiler.py b/django/contrib/gis/db/models/sql/compiler.py
index 405a000f42..9a4ea6a942 100644
--- a/django/contrib/gis/db/models/sql/compiler.py
+++ b/django/contrib/gis/db/models/sql/compiler.py
@@ -171,10 +171,6 @@ class GeoSQLCompiler(compiler.SQLCompiler):
"""
values = []
aliases = self.query.extra_select.keys()
- if self.query.aggregates:
- # If we have an aggregate annotation, must extend the aliases
- # so their corresponding row values are included.
- aliases.extend([None for i in xrange(len(self.query.aggregates))])
# Have to set a starting row number offset that is used for
# determining the correct starting row index -- needed for
diff --git a/django/contrib/gis/tests/relatedapp/tests.py b/django/contrib/gis/tests/relatedapp/tests.py
index 685700e9ae..9ef090b901 100644
--- a/django/contrib/gis/tests/relatedapp/tests.py
+++ b/django/contrib/gis/tests/relatedapp/tests.py
@@ -245,6 +245,13 @@ class RelatedGeoModelTest(TestCase):
self.assertEqual(1, len(vqs))
self.assertEqual(3, vqs[0]['num_books'])
+ def test13c_count(self):
+ "Testing `Count` aggregate with `.values()`. See #15305."
+ qs = Location.objects.filter(id=5).annotate(num_cities=Count('city')).values('id', 'point', 'num_cities')
+ self.assertEqual(1, len(qs))
+ self.assertEqual(2, qs[0]['num_cities'])
+ self.assertTrue(isinstance(qs[0]['point'], GEOSGeometry))
+
# TODO: The phantom model does appear on Oracle.
@no_oracle
def test13_select_related_null_fk(self):
@@ -284,7 +291,7 @@ class RelatedGeoModelTest(TestCase):
def test16_annotated_date_queryset(self):
"Ensure annotated date querysets work if spatial backend is used. See #14648."
- birth_years = [dt.year for dt in
+ birth_years = [dt.year for dt in
list(Author.objects.annotate(num_books=Count('books')).dates('dob', 'year'))]
birth_years.sort()
self.assertEqual([1950, 1974], birth_years)