【问题标题】:GeoDjango distance query for a ForeignKey Relationship外键关系的 GeoDjango 距离查询
【发布时间】:2011-02-21 16:27:12
【问题描述】:

我有以下模型(简化)

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()

我正在尝试查找所有模型 B 对象并按与给定位置的距离对它们进行排序(其中距离定义为给定位置与关联模型 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。

谢谢。

【问题讨论】:

    标签: django django-models geodjango


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-02-12
      • 2015-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-16
      • 2019-06-13
      • 1970-01-01
      • 2011-10-14
      相关资源
      最近更新 更多