我有以下模型:
class Vacancy(models.Model): lat = models.FloatField('Latitude', blank=True) lng = models.FloatField('Longitude', blank=True)
我应该如何查询以距离排序(距离为无穷大)?
如果需要,可以在PosgreSQL,GeoDjango上工作。
注意:请检查下面的cleder答案,其中提到了Django版本中的弃用问题(距离->批注)。
首先,最好使一个点字段而不是使lat和lnt分开:
from django.contrib.gis.db import models location = models.PointField(null=False, blank=False, srid=4326, verbose_name='Location')
然后,您可以像这样过滤它:
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' )