通过.extra()筛选Django对象,选择经纬度半径

时间:2019-06-02 09:24:15

标签: django django-models

我有一个用于基于位置的服务的Django模型,并尝试按半径过滤位置。

我尝试使用.extra()查询,但不起作用。 distance的值只能用于排序,不能用于过滤。

# models.py
class Location(models.Model):
    latitude = models.FloatField()
    longitude = models.FloatField()
    place_name = models.CharField(max_length=65)

    class Meta:
        db_table = "shop_location"

    def __str__(self):
        return self.place_name

# views.py
shop_locations = Location.objects.extra(
        select={
            'distance': '6371 * acos( cos( radians(9) )'
            '* cos( radians( COALESCE(latitude, 0) ) )'
            '* cos( radians( COALESCE(longitude, 0) )'
            '- radians(11) ) + sin( radians(9) )'
            '* sin( radians( COALESCE(latitude, 0) ) ) )'
        },
    ).extra(order_by=['distance']).filter(distance<10) # on radius 10KM

但是返回错误name 'distance' is not defined。 如何解决。 我不想使用GeoDjango。

0 个答案:

没有答案