我试图返回距离相关模型的距离的查询集。
models.py(简化)
class Store(models.Model):
geopoint = models.PointField(srid=4326)
objects = models.GeoManager()
class HashTag(models.Model):
tag = models.CharField(max_length=100)
class Label(models.Model):
hashtags = models.ManyToManyField(HashTag)
store = models.ForeignKey(Store)
我需要返回的是Label对象,它们具有按给定点的距离排序的特定标记/标记。
标签可以通过以下方式找到:
Label.objects.filter(hashtags__in=tags)
通过以下方式计算的商店对象的距离为:
Store.objects.filter(label__hashtags__in=tags)
.distance(location).order_by('distance')
我想做的是在Label
表上执行查询以返回所有内容,但我怀疑这是不可能的。
在查询集上尝试distance
方法会导致:
TypeError: ST_Distance output only available on GeometryFields.
如果没有做到最有效率的下一个最好的事情是有意义的。我能想出的唯一解决方案是执行两个查询并将结果合并到一个集合中。
答案 0 :(得分:0)
绝对可以实现您的查询:
annotate()
在每个Label
对象上附加距离值。Distance()
功能计算每个商店的geopoint
和location
点之间的距离查询应如下所示:
from django.contrib.gis.db.models.functions import Distance
Label.objects.filter(hashtags__in=tags)
.annotate(distance=Distance('store__geopoint', location))
.order_by('distance')