Opened 16 years ago

Closed 16 years ago

Last modified 16 years ago

#9364 closed (fixed)

Spatial queries don't work on inherited geometry fields

Reported by: jbronn Owned by: jbronn
Component: GIS Version: 1.0
Severity: Keywords: gis inheritance
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: yes Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by jbronn)

In the following models TexasCity inherits from City:

from django.contrib.gis.db import models

class City(models.Model):
    name = models.CharField(max_length=30)
    point = models.PointField()
    objects = models.GeoManager()

    def __unicode__(self): return self.name

class TexasCity(City):
    tx_county = models.CharField(max_length=30)
    objects = models.GeoManager() # Why does this need to be explicit?

    def __unicode__(self):
        return '%s (%s County)' % (self.name, self.tx_county)

When performing the following query:

In [4]: qs = TexasCity.objects.distance(pnt)

This SQL is generated, which is incorrect (there is no "point" column on the TexasCity model):

In [23]: qs.query.as_sql()
Out[23]: 
(u'SELECT (ST_distance_sphere("tz_texascity"."point",%s)) AS "distance", "tz_city"."id", "tz_city"."name", "tz_city"."point", "tz_texascity"."city_ptr_id", "tz_texascity"."tx_county" FROM "tz_texascity" INNER JOIN "tz_city" ON ("tz_texascity"."city_ptr_id" = "tz_city"."id")',
 (<django.contrib.gis.db.backend.postgis.adaptor.PostGISAdaptor object at 0x319b610>,))

Attachments (1)

handle_inherited_geofields.diff (10.1 KB ) - added by jbronn 16 years ago.
Patch that allows GeoQuerySet methods to operate on inherited geometry fields; includes tests.

Download all attachments as: .zip

Change History (6)

comment:1 by jbronn, 16 years ago

Description: modified (diff)

comment:2 by jbronn, 16 years ago

Needs tests: set
Status: newassigned

I want tests before I'll commit this -- but this appears to solve the problem by using the correct database table name for the inherited geometry field.

by jbronn, 16 years ago

Patch that allows GeoQuerySet methods to operate on inherited geometry fields; includes tests.

comment:3 by jbronn, 16 years ago

Resolution: fixed
Status: assignedclosed

(In [9336]) Fixed #9364 -- now uses the appropriate database table for inherited GeometryFields; now uses the SpatialBackend booleans in tests.

comment:4 by jbronn, 16 years ago

(In [9337]) Fixed #9364 -- now uses the appropriate database table for inherited GeometryFields; now uses the SpatialBackend booleans in tests.

Backport of r9336 from trunk.

comment:5 by (none), 16 years ago

milestone: post-1.0

Milestone post-1.0 deleted

Note: See TracTickets for help on using tickets.
Back to Top