﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
17314	Error creating nested query with GeoDjango's spatial filters	jpk	nobody	"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
"	Bug	closed	GIS	1.3	Normal	duplicate		jpk	Accepted	0	0	0	0	0	0
