I have the following model:
class Vacancy(models.Model):
lat = models.FloatField('Latitude', blank=True)
lng = models.FloatField('Longitude', blank=True)
How should I make a query to sort by distance (distance is infinity)?
Working on PosgreSQL, GeoDjango if it is required.
Note: Please check cleder's answer below which mentions about deprecation issue (distance -> annotation) in Django versions.
First of all, it is better to make a point field instead of making lat and lnt separated:
from django.contrib.gis.db import models
location = models.PointField(null=False, blank=False, srid=4326, verbose_name='Location')
Then, you can filter it like that:
from django.contrib.gis.geos import Point
from django.contrib.gis.measure import D
distance = 2000
ref_location = Point(1.232433, 1.2323232)
res = YourModel.objects.filter(
location__distance_lte=(
ref_location,
D(m=distance)
)
).distance(
ref_location
).order_by(
'distance'
)