我有一个用于基于位置的服务的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。