#17314: Error creating nested query with GeoDjango's spatial filters ----------------------------------------------+-------------------- Reporter: jpk | Owner: nobody Type: Bug | Status: new Component: Database layer (models, ORM) | Version: 1.3 Severity: Normal | Keywords: Triage Stage: Unreviewed | Has patch: 0 Easy pickings: 0 | UI/UX: 0 ----------------------------------------------+-------------------- With the following models: {{{ from django.contrib.gis.db import models
class Spot(models.Model): objects = models.GeoManager() location = models.PointField(srid=4326, spatial_index=True) def __unicode__(self): return "id: %s" % self.id class Property(models.Model): objects = models.GeoManager() spot = models.ForeignKey(Spot) def __unicode__(self): return "belonging to Spot %s" % self.spot_id }}} And using, for example, the following filters: {{{ spots = Spot.objects.filter(location__contained=Polygon(( (-180,90),(180,90),(180,0),(-180,0),(-180,90) )) ) props = Property.objects.filter(spot__in=spots) }}} And trying to iterate over props, causes the following error: {{{ >>> for p in props: ... print p ... Traceback (most recent call last): File "<console>", line 1, in <module> File "/usr/lib/pymodules/python2.7/django/db/models/query.py", line 107, in _result_iter self._fill_cache() File "/usr/lib/pymodules/python2.7/django/db/models/query.py", line 772, in _fill_cache self._result_cache.append(self._iter.next()) File "/usr/lib/pymodules/python2.7/django/db/models/query.py", line 273, in iterator for row in compiler.results_iter(): File "/usr/lib/pymodules/python2.7/django/db/models/sql/compiler.py", line 680, in results_iter for rows in self.execute_sql(MULTI): File "/usr/lib/pymodules/python2.7/django/db/models/sql/compiler.py", line 725, in execute_sql sql, params = self.as_sql() File "/usr/lib/pymodules/python2.7/django/db/models/sql/compiler.py", line 68, in as_sql where, w_params = self.query.where.as_sql(qn=qn, connection=self.connection) File "/usr/lib/pymodules/python2.7/django/db/models/sql/where.py", line 92, in as_sql sql, params = child.as_sql(qn=qn, connection=connection) File "/usr/lib/pymodules/python2.7/django/db/models/sql/where.py", line 95, in as_sql sql, params = self.make_atom(child, qn, connection) File "/usr/lib/pymodules/python2.7/django/contrib/gis/db/models/sql/where.py", line 50, in make_atom return super(GeoWhereNode, self).make_atom(child, qn, connection) File "/usr/lib/pymodules/python2.7/django/db/models/sql/where.py", line 166, in make_atom if (len(params) == 1 and params[0] == '' and lookup_type == 'exact' File "/usr/lib/pymodules/python2.7/django/contrib/gis/db/backends/postgis/adapter.py", line 24, in __eq__ return (self.ewkb == other.ewkb) and (self.srid == other.srid) AttributeError: 'str' object has no attribute 'ewkb' }}} A full paste of me reproducing the error in the python shell here: http://pastebin.com/fBySTUD0 I also have a little test project I used to reproduce this. I can post it somewhere if needed. Doing the same thing without using a spatial filter works fine. Being new to django, I assumed I was doing something wrong, but after a conversation in the #geodjango channel, it was concluded that this is probably a bug in the ORM. There's a paste of that conversation here: http://pastebin.com/bwZYVa6j System information (everything installed from ubuntu's packages): * Ubuntu 11.10 * Python 2.7.2 * Django 1.3.0 * PostgreSQL 9.1.1 * PostGIS 1.5.3 -- Ticket URL: <https://code.djangoproject.com/ticket/17314> Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To post to this group, send email to django-updates@googlegroups.com. To unsubscribe from this group, send email to django-updates+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-updates?hl=en.