我目前在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',
)