У меня есть модели 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.