Django sort by distance

前端 未结 7 1009
旧时难觅i
旧时难觅i 2020-11-28 04:34

I have the following model:

class Vacancy(models.Model):
    lat = models.FloatField(\'Latitude\', blank=True)
    lng = models.FloatField(\'Longitude\', bla         


        
7条回答
  •  情深已故
    2020-11-28 05:21

    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'
    )
    

提交回复
热议问题