Фильтрация объектов Django с помощью .extra () select для широты и радиуса lng - PullRequest
1 голос
/ 02 июня 2019

У меня есть модели Django для сервисов, основанных на определении местоположения, и я пытаюсь отфильтровать местоположение по радиусу.

Я пытаюсь использовать запрос .extra(), но не работает.Значение расстояния может использоваться только для сортировки, но не для фильтрации.

# 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...