Запрос расстояния GeoDjango для ForeignKey Relationship - PullRequest
3 голосов
/ 21 февраля 2011

У меня есть следующие модели (упрощенно)

from django.contrib.gis.db import models as geomodels

modelB (geomodels.Model):
    objects = geomodels.GeoManager()

modelA (geomodels.Model):
    point   =   geomodels.PointField(unique=True)
    mb      =   models.ForeignKey(modelB,related_name='modela')
    objects =   geomodels.GeoManager()

Я пытаюсь найти все объекты modelB и отсортировать их по расстоянию от заданного местоположения (где расстояние определяется как расстояние между заданным местоположением иточечный объект связанной модели A).Когда я пытаюсь выполнить запрос

modelB.objects.distance((loc, field_name='modela__point')

, я получаю сообщение об ошибке:

TypeError: ST_Distance output only available on GeometryFields. 

Обратите внимание, что loc это объект Point. Однако когда я запускаю запрос

modelB.objects.filter(modela__point__distance_lte = (loc, 1000)) 

этот запрос работает без ошибок и, как и ожидалось.

Есть идеи, в чем может быть ошибка?Я использую django 1.2.4, PostGis 1.5.2, PostGres 8.4.

Спасибо.

1 Ответ

5 голосов
/ 25 августа 2011

Для первого вам нужно изменить его на:

modelB.objects.all().distance(loc, field_name='modela__point')

, если вы хотите увидеть все объекты modelB.

«.distance» используется для вычисления и добавления поля расстояния к каждой результирующей строке QuerySet (или GeoQuerySet).

...