#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 )
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)
Change History (6)
comment:1 by , 16 years ago
Description: | modified (diff) |
---|
comment:2 by , 16 years ago
Needs tests: | set |
---|---|
Status: | new → assigned |
by , 16 years ago
Attachment: | handle_inherited_geofields.diff added |
---|
Patch that allows GeoQuerySet methods to operate on inherited geometry fields; includes tests.
comment:3 by , 16 years ago
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
comment:4 by , 16 years ago
Note:
See TracTickets
for help on using tickets.
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.