Sfoglia il codice sorgente

Fixed #16409 (again, this time for GeoDjango).

Thanks Aymeric Augustin for the regression test and Petr Gorodechnyj for
the patch.

Refs r16522.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@17506 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Ramiro Morales 13 anni fa
parent
commit
d72d5ce827

+ 1 - 1
django/contrib/gis/db/models/sql/compiler.py

@@ -37,7 +37,7 @@ class GeoSQLCompiler(compiler.SQLCompiler):
                 if isinstance(col, (list, tuple)):
                     alias, column = col
                     table = self.query.alias_map[alias][TABLE_NAME]
-                    if table in only_load and col not in only_load[table]:
+                    if table in only_load and column not in only_load[table]:
                         continue
                     r = self.get_field_select(field, alias, column)
                     if with_aliases:

+ 6 - 0
django/contrib/gis/tests/geoapp/test_regress.py

@@ -4,6 +4,7 @@ from datetime import datetime
 
 from django.contrib.gis.tests.utils import no_mysql, no_spatialite
 from django.contrib.gis.shortcuts import render_to_kmz
+from django.db.models import Count
 from django.test import TestCase
 
 from .models import City, PennsylvaniaCity, State
@@ -58,3 +59,8 @@ class GeoRegressionTests(TestCase):
 
          # .count() should not throw TypeError in __eq__
          self.assertEqual(cities_within_state.count(), 1)
+
+    def test06_defer_or_only_with_annotate(self):
+        "Regression for #16409 - make sure defer() and only() work with annotate()"
+        self.assertIsInstance(list(City.objects.annotate(Count('point')).defer('name')), list)
+        self.assertIsInstance(list(City.objects.annotate(Count('point')).only('name')), list)