我有一个事件模型,仅包含一个纬度和经度的FloatField()字段,为了简单起见。
从Python本地的“geopy.distance”库中,您可以通过以下方式获取两个坐标之间的距离:
from geopy.distance import distance
home = (33.28473, -117.20384)
event = (33.829384, -117.38932)
distance = distance(home, event).miles #returns a float
在我的应用上下文中,我需要按位置对所有事件进行排序。我尝试了标准的 Django 注释语法:
Event.objects.all().annotate(distance=distance( (F('lat'),F('lon')), home ).miles).order_by('distance')
但是我从geopy库得到以下错误:
TypeError: float() argument must be a string or a number, not 'F'
奇怪的是,这个可以正常工作:
>>> def foo(x):
return x * 2
>>> Event.objects.all().annotate(cutomField=foo(F('field')))
看起来你可以使用F类型进行算术运算,但geopy似乎不知道这一点。
有没有办法将F类型转换为浮点数,以便geopy可以处理该字段?