Django django.contrib.gis.db.models.functions.Distance以英尺而不是米为单位返回值 [英] Django django.contrib.gis.db.models.functions.Distance to return values in feet instead of meters

查看:17
本文介绍了Django django.contrib.gis.db.models.functions.Distance以英尺而不是米为单位返回值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下代码将正确筛选:

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

以米为单位。

可以把它放在脚上吗?

推荐答案

如果我们查看Distance documentation,我们将看到以下内容:

因为Distance属性是一个距离对象,所以您可以轻松地用您选择的单位来表示该值。

虽然这不是entirely true

这两者之间的关系并不密切。Docs确实说它"返回"距离对象,但还有一个额外的步骤:

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

这篇关于Django django.contrib.gis.db.models.functions.Distance以英尺而不是米为单位返回值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆