【问题标题】:Django Rest Framework - How do I limit results returned with Geolocation?Django Rest Framework - 如何限制地理定位返回的结果?
【发布时间】:2015-07-12 13:25:23
【问题描述】:

我有一个存储用户位置的模型:

[
{
    "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 模型中的普通用户模型相关联。

【问题讨论】:

    标签: python django geolocation django-rest-framework


    【解决方案1】:

    您正在寻找的是按地理位置查询/过滤的能力。看看GeoDjango

    一旦您可以使用地理范围运行模型 filter(),那么只需使用 django-rest-framework 将其应用于您的 APIView。

    【讨论】:

      【解决方案2】:

      两件事,你应该使用 Django's GIS (GeoDjango) featuresGIS plugin 用于 Django REST 框架。

      GeoDjango 将与您的数据库(可能是PostGIS)一起使用,以准确存储和表示地理空间数据。这意味着您不必担心将位置标准化,因为它们会提供给您,并且您不必手动 handle filtering - 比如 finding locations in a radius

      GIS 插件提供的a DistanceToPoint filter 听起来正是您正在寻找的。您可以将米数与用作中心的点一起传递,它将删除任何超出该范围的结果。这将允许您使用 Django REST 框架的内置视图和序列化程序,而无需处理查询集并自行应用过滤。

      【讨论】:

      • 太好了,这正是我的想法 - 谢谢!
      猜你喜欢
      • 2020-01-16
      • 2022-01-03
      • 1970-01-01
      • 2019-08-19
      • 1970-01-01
      • 2016-12-29
      • 2016-12-21
      • 2016-12-03
      • 2016-04-04
      相关资源
      最近更新 更多