以下代码将正确过滤:
def nearby(self, latitude, longitude, proximity=None):
"""Get nearby Merchants.
Custom queryset method for getting merchants associated with
nearby places.
Returns:
A queryset of ``Merchant`` objects.
"""
point = Point(latitude, longitude)
# we query for location nearby for places first and then
# annotate with distance to the same place
return self.filter(
places__location__distance_lte=(point, D(ft=proximity))
).annotate(distance=models.Min(Distance('places__location', point)))
但是
返回的值models.Min(Distance('places__location', point))
以米为单位。
是否有可能将其置于脚下?
答案 0 :(得分:0)
如果我们看一下Distance
documentation,我们会看到:
因为distance属性是Distance对象,所以您可以轻松地以您选择的单位表示值。
虽然这不是entirely true:
这两者并不是彼此密切相关的。文档确实说它"返回"距离对象,但还有一个额外的步骤:
django.contrib.gis.db.models.functions.Distance
是一个数据库函数,它接受两个表达式(可能包括数据库字段名称)并返回一个Func
对象,该对象可用作查询的一部分。简单地说,它需要在数据库中执行。它将使用数据库函数计算距离(例如postgis ST_Distance),然后将其作为
django.contrib.gis.measure.Distance
对象返回
<小时/> 从以上情况来看,你可以这样做:
... .annotate(distance=models.Min(Distance('places__location', point).ft))