sau*_*abh 3 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()
Run Code Online (Sandbox Code Playgroud)
我试图找到所有的modelB对象,并按距离给定位置(距离定义为给定位置与相关模型A的点对象之间的距离)对它们进行排序.当我尝试运行查询时
modelB.objects.distance((loc, field_name='modela__point')
Run Code Online (Sandbox Code Playgroud)
我收到一个错误说
TypeError: ST_Distance output only available on GeometryFields.
Run Code Online (Sandbox Code Playgroud)
请注意,loc是一个Point对象.但是,当我运行查询时
modelB.objects.filter(modela__point__distance_lte = (loc, 1000))
Run Code Online (Sandbox Code Playgroud)
此查询正常工作,没有错误.
知道错误是什么吗?我使用的是django 1.2.4,PostGis 1.5.2,PostGres 8.4.
谢谢.
小智 5
对于第一个,您需要将其更改为:
modelB.objects.all().distance(loc, field_name='modela__point')
Run Code Online (Sandbox Code Playgroud)
如果要查看所有modelB对象.
".distance"用于计算和向QuerySet(或GeoQuerySet)的每个结果行添加距离字段.
| 归档时间: |
|
| 查看次数: |
948 次 |
| 最近记录: |