Django django.contrib.gis.db.models.functions.Distance返回以英尺而不是米为单位的值

时间:2017-06-08 00:36:38

标签: python django python-3.x django-orm

以下代码将正确过滤:

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

以米为单位。

是否有可能将其置于脚下?

1 个答案:

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