3

我有以下模型(简化)

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对象并按与给定位置的距离对它们进行排序(其中距离定义为给定位置与关联modelA的点对象之间的距离)。当我尝试运行查询时

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。

谢谢。

4

1 回答 1

5

对于第一个,您需要将其更改为:

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

如果您想查看所有 modelB 对象。

“.distance”用于计算距离字段并将其添加到QuerySet(或GeoQuerySet)的每个结果行。

于 2011-08-25T01:00:26.240 回答