ForeignKey关系的GeoDjango距离查询

时间:2011-02-21 16:27:12

标签: django django-models geodjango

我有以下型号(简化)

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。

感谢。

1 个答案:

答案 0 :(得分:5)

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

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

如果你想看到所有的modelB对象。

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