我有一个存储用户位置的模型:
[
{
"url": "http://192.168.0.22:8000/status/1/",
"id": 1,
"owner": 1,
"test_info": "",
"created_at": "2015-05-02T07:09:16.535689Z",
"updated_at": "2015-05-02T07:09:16.535746Z",
"geolocation": null,
"jukebox_mode_enabled": false
},
{
"url": "http://192.168.0.22:8000/status/2/",
"id": 2,
"owner": 2,
"test_info": "",
"created_at": "2015-05-02T07:09:24.206959Z",
"updated_at": "2015-05-02T07:09:24.207042Z",
"geolocation": null,
"jukebox_mode_enabled": false
},
我正在尝试实现一个允许用户查询并查看附近还有其他人的系统,但出于安全考虑,我希望将结果限制为1KM的用户。
实现这一目标的最佳方法是什么?
P.S - "状态"使用oneToOneField绑定到django模型中的普通用户模型。
答案 0 :(得分:2)
您正在寻找的是通过地理位置查询/过滤的能力。看看GeoDjango。
一旦你可以运行具有地理范围的模型过滤器(),那么只需将其应用于使用django-rest-framework的APIView。
答案 1 :(得分:1)
有两件事,你应该使用Django's GIS (GeoDjango) features和GIS plugin用于Django REST框架。
GeoDjango将本地使用您的数据库(可能是PostGIS)来准确存储和表示地理空间数据。这意味着您无需担心将位置规范化,也不必手动handle filtering - 例如finding locations in a radius。
GIS插件提供的a DistanceToPoint
filter听起来就像您正在寻找的那样。您可以传递米数以及要用作中心的点,它将删除超出该范围的任何结果。这将允许您使用Django REST框架的内置视图和序列化程序,而无需处理查询集并自行应用过滤。