django-rest-framework - 如何在Django Rest中距离客户位置25公里的基础上列出/订购模型中具有经纬度字段的多家医院?
问题描述
我目前在 DRF 工作,我有一个可以列出的许多医院的数据列表。我需要根据客户所在地的半径25公里来订购。医院模型和客户档案都有纬度和经度字段。
解决方案
我认为您正在寻找的方法是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',
)
推荐阅读
- graphql - 条件流问题取决于使用 Auth0 和 GraphQL 身份验证的对象属性
- c - 了解推送功能
- python - 用理论最小值/最大值替换数据框中的异常值
- javascript - 在事件处理程序中从 localStorage 获取数据时不呈现组件
- git - 我怎么知道分支合并到哪里?
- amazon-web-services - ECS 服务发现 DNS 更新延迟较大
- rabbitmq - 无服务器长时间运行的任务
- python - Python中的随机匹配项目
- android - RecyclerView 在自定义视图中重用变量
- python - UnicodeEncodeError:'ascii'编解码器无法对位置 0-2 中的字符进行编码:序数不在范围内(128)与 python