如何在距离Django Rest客户位置25公里的基础上列出/订购模型中具有纬度和长字段的医院?



我目前在DRF工作,我有很多医院的数据列表,我可以列出。我需要在客户位置半径25km的基础上订购。医院模型和客户配置文件都有纬度和经度字段。

我认为您正在寻找的方法是GeoDjango,它为您提供了空间支持,并允许您定义如下字段:

from django.contrib.gis.db.models import PointField
class Hospital(models.Model):
coordinates = PointField(
geography=True,
null=True,
blank=True,
)

并且考虑到您的用户也有一个coordinates字段,那么您可以使用distance_lte:

from django.contrib.gis.measure import D
hospitals_within_25_km_radius = Hospital.objects.filter(
coordinates__distance_lte=(user.coordinates, D(km=25))
)

,甚至根据最近的医院筛选和排序:

from django.contrib.gis.db.models.functions import Distance
hospitals_within_25_km_ordered_by_closest = Hospital.objects.annotate(
distance=Distance('coordinates', user.coordinates),
).filter(
distance__lte=25000,
).order_by(
'distance',
)

相关内容

  • 没有找到相关文章