您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

具有动态半径的Django过滤器位置距离

具有动态半径的Django过滤器位置距离

这似乎内部发生MeasureBasedjango.contrib.gis.measure(其Distance/D从继承),更具体default_units方法,其中它试图铸造str或数字输入值float而接收F表达式来代替。

我们可以做一个解决办法,就是annotateDistance(之间)shop.location_point和电流location_point,然后我们可以通过距离的过滤嘴<=比实例radius

from django.contrib.gis.db.models.functions import Distance

zone_list = Zone.objects.annotate(
    distance=Distance('location_point', shop.location_point)
).filter(distance__lte=F('radius'))

@ e4c5提供的出色答案表示敬意:GeoDjango根据与模型字段的距离进行过滤

另一种方法annotation完全消除该部分,然后通过Distance以下方法直接进行过滤:

from django.contrib.gis.db.models.functions import Distance

zone_list = Zone.objects.filter(
    radius_gte=Distance('location_point', shop.location_point)
)

我在此保留评论的连续性:

您可以尝试投的 F('radius')结果作为 FloatField()使用 Cast() 方法打开整数为float。

zone_list = Zone.objects.filter(
    location_point__distance_lte=(
        shop.location_point, 
        D(m=Cast('radius', output_field=models.FloatField()))
    )
)
Go 2022/1/1 18:37:28 有373人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶