2015-05-02 3 views
7

У меня есть модель, которая хранит пользователь местоположение:Django Rest Framework - Как ограничить результаты, возвращенные с помощью Geolocation?

[ 
{ 
    "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 - «статус» привязан к нормальной модели пользователя в модели django с использованием oneToOneField.

ответ

2

Что вы ищете, это возможность запроса/фильтрации по геолокации. Взгляните на GeoDjango.

Как только вы можете запустить фильтр модели() с географическим диапазоном, то это просто вопрос применения этого к вашему APIView с django-rest-framework.

+0

Отлично! - Спасибо – jwv

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 без необходимости обрабатывать запросы и применять фильтрацию самостоятельно.

+0

Отлично, это именно то, о чем я думал - Спасибо! – jwv

Смежные вопросы