【问题标题】:Django: Filtering Queryset From Two Model FieldsDjango:从两个模型字段中过滤查询集
【发布时间】:2013-10-10 14:48:15
【问题描述】:

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

例如:

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

【问题讨论】:

  • Thing 模型是如何定义的?
  • 在@karthikr 上方添加了相关模型字段。如果我忽略了任何重要信息,请告诉我,我会添加它。感谢您提供任何可能有帮助的想法!
  • Thing.objects.filter(pnt 期望 pnt 成为模型属性。
  • 谢谢!是的,我明白这一点,但我正试图弄清楚如何做类似的事情。你有什么想法?通常如何做这样的事情?我希望保留latlon 作为模型字段,以便以后更容易插入谷歌地图..
  • z = Thing.objects.filter(lat=pnt.get_x(), lng = pnt.get_y())

标签: django filter point geodjango django-queryset


【解决方案1】:

执行此操作的最直接方法是 @karthikr 在 cmets 中对您的问题所说的,只有两个:

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

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

【讨论】:

    猜你喜欢
    • 2021-09-27
    • 2021-08-05
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 2015-09-06
    • 2012-09-05
    • 2018-09-01
    相关资源
    最近更新 更多