0

我的模型有两个字段(纬度和经度),我想将它们组合成一个点对象。但是,我无法弄清楚如何根据这些值的组合进行过滤:

例如:

>>> from django.contrib.gis.geos import Point
>>> lat = 5
>>> lon = 1
>>> pnt = Point(lat, lon)
>>> buf = pnt.buffer(0.0001)
>>> z = Thing.objects.filter(pnt__intersects=buf) 

FieldError: Cannot resolve keyword 'pnt' into field.   ## I dont have a model field named pnt

我意识到这不是正确的方法,但我认为它说明了我遇到的问题。如何将两个模型字段 - lat + lon- 组合成一个Point对象,然后根据该点进行过滤?


编辑:添加事物模型

class Thing(models.Model):
    lat = models.FloatField()
    lon = models.FloatField()
4

1 回答 1

1

最直接的方法是@karthikr 在对您的问题的评论中所说的,只有两个:

z = Thing.objects.filter(lat=pnt.get_x(), lng = pnt.get_y())

或者,我不知道您在数据库中有多少余地,但您也可以将点与您的 Thing 对象分开存储,然后将 Thing 对象链接到 Point?

伪代码:

class Thing(models.Model):
   point = models.ForeignKey('Point')

class Point(models.Model):
   lat = models.FloatField()
   lon = models.FloatField()


z = Thing.objects.filter(point = Point.objects.get(lat, long))

否则,我认为没有办法按照您的要求进行操作。

于 2013-10-04T10:49:36.343 回答