【发布时间】:2013-10-25 00:04:33
【问题描述】:
我想使用 Geodjango 使用 distance_lte 过滤由纬度和经度值组成的 Point 对象。以下是我设置模型的方法:
class Point(models.Model):
latitude = models.FloatField()
longitude = models.FloatField()
objects = models.GeoManager()
class Thing(models.Model):
point = models.ForeignKey(Point)
objects = models.GeoManager()
我试过这样过滤,但没有奏效:
>>> from myapp.models import Thing, Point
>>> from django.contrib.gis.measure import D
>>> pnt = Point(37.7725205498, -122.408472587)
>>> z = Thing.objects.filter(point__distance_lte=(pnt,D(km=5)))
TypeError: Related Field has invalid lookup: distance_lte
我该如何做这样的事情? :
>>> z = Thing.objects.filter(point__distance_lte=(pnt,D(km=5)))
### or ###
>>> z = Thing.objects.filter(point__(latitude_longitude)__distance_lte=(pnt,D(km=5)))
感谢您的任何想法!
【问题讨论】:
-
你是从 django.contrib.gis.db 继承你的模型吗?如果没有,您应该这样做。
-
我刚刚意识到我同时导入了
django.db.models和django.contrib.gis.db.models。但是,在删除django.db.models导入后,我仍然从该查询中得到相同的结果:z = Thing.objects.filter(point__distance_lte=(pnt,D(km=5))) TypeError: Related Field has invalid lookup: distance_lte。还有什么我可能会错过的吗?感谢您的想法! -
然后你已经重置了数据库中的所有模型?
-
我尝试使用 South 运行架构迁移,但它说没有任何改变。我需要转储并重新创建数据库吗?
-
如果它不繁重,我会的。只是为了消除这种可能性。另外,您的 Point 模型是地理模型的子类吗?该模型需要。
标签: django filter distance geodjango django-queryset