我的模型有两个字段(纬度和经度),我想要组合它们以形成一个点对象。但是,我无法弄清楚如何根据这些值的组合进行过滤:
例如:
>>> 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()
答案 0 :(得分: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))
否则,我认为没有办法做你所要求的。