order_by(' - distance')未按预期工作

时间:2013-08-12 18:09:28

标签: django geolocation geospatial geodjango geos

我正在尝试创建一个数据库查询,它给出了按距离排序的20个最接近的用户(所以最接近的第一个)我正在进行以下操作

distance_mi = 100

origin = GEOSGeometry('SRID=4326;'+ 'POINT('+ str(user_profile.current_location.x)+' '+str(user_profile.current_location.y)+')')

close_users = UserProfile.objects.exclude(user = user).filter(current_location__distance_lte=(origin, D(mi=distance_mi))).distance(origin).order_by('-distance')[:20]

但这会返回3个用户(这是正确的),但第一个用户距离0英里,第二个用户距离8英里,第三个距离是0英里,因为我除了8英里用户之外结束。

我不确定我在这方面做错了什么。

此外,UserProfile具有以下模型

class UserProfile(models.Model):
    # This field is required.
    user = models.OneToOneField(User)
    # Other fields here
    current_location = models.PointField(null = True)
    seller_current_location = models.PointField(null = True)
    objects = models.GeoManager()
    def __unicode__(self):
        return u'%s' % (self.user.get_full_name())

1 个答案:

答案 0 :(得分:2)

由于您的UserProfile包含多个地理字段,因此您应使用field_name参数指定所需的地理字段{/ 1}}。

distance()

有关详细信息,请参阅documentation