#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 , 17 years ago
| Description: | modified (diff) |
|---|
comment:2 by , 17 years ago
| Needs tests: | set |
|---|---|
| Status: | new → assigned |
by , 17 years ago
| Attachment: | handle_inherited_geofields.diff added |
|---|
Patch that allows GeoQuerySet methods to operate on inherited geometry fields; includes tests.
comment:3 by , 17 years ago
| Resolution: | → fixed |
|---|---|
| Status: | assigned → closed |
comment:4 by , 17 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.