Django:从两个模型字段过滤Queryset

时间:2013-10-03 18:59:05

标签: django filter point geodjango django-queryset

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

例如:

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

1 个答案:

答案 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))

否则,我认为没有办法做你所要求的。