#25310: GeoManager's distance() method doesn't work with lookups that span multiple relationships -----------------------------+---------------------------------- Reporter: seddonym | Owner: nobody Type: New feature | Status: new Component: GIS | Version: 1.8 Severity: Normal | Keywords: GeoManager, distance Triage Stage: Unreviewed | Has patch: 0 Easy pickings: 0 | UI/UX: 0 -----------------------------+---------------------------------- It is not currently possible to use the GeoQuerySet's distance() method to make a query that spans multiple relationships. For example: {{{
from django.contrib.gis.db import models class Location(models.Model): point = models.PointField() objects = models.GeoManager() class Office(models.Model): location = models.ForeignKey(Location) objects = models.GeoManager() class Person(models.Model): office = models.ForeignKey(Office) objects = models.GeoManager() }}} It is possible to distance query the offices: {{{ >>> point = Location.objects.first().point >>> Office.objects.distance(point, field_name='location__point') [<Office 1>, <Office 2>] }}} But not people: {{{ >>> Person.objects.distance(point, field_name='office__location__point') *** TypeError: ST_Distance output only available on GeometryFields. }}} The reason for this is because of the way `django.contrib.gis.db.models.query.GeoQuerySet._geo_field()` performs the check - it just looks for fields that are in the model class's `._meta.fields`. (Incidentally, I'm not sure this is the correct error message - actually it hasn't found the field at all, and should probably say so.) -- Ticket URL: <https://code.djangoproject.com/ticket/25310> 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 unsubscribe from this group and stop receiving emails from it, send an email to django-updates+unsubscr...@googlegroups.com. To post to this group, send email to django-updates@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/051.8f7117aaa9f8a9bf6a8c56a6e0e6e1bc%40djangoproject.com. For more options, visit https://groups.google.com/d/optout.