2015-05-02 10 views
7

Mam modelu, który przechowuje lokalizację użytkowników:Django Rest Framework - Jak ograniczyć wyniki zwracane przez 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 
}, 

Próbuję uzyskać system, który pozwala użytkownikom na kwerendy i zobaczyć, kto jest w pobliżu, ale ze względów bezpieczeństwa chciałbym ograniczyć wyniki do użytkowników powiedz 1KM.

Jaki jest najlepszy sposób, aby to osiągnąć?

P.S - "Stan" jest powiązany ze zwykłym modelem użytkownika w modelu django przy użyciu oneToOneField.

Odpowiedz

2

To, czego szukasz, to możliwość zapytania/filtra przez geolokalizację. Spójrz na GeoDjango.

Po uruchomieniu filtra modelu() z zakresem geograficznym, jest to tylko kwestia zastosowania tego do APIView z django-rest-framework.

+0

Idealny! - Dziękuję – jwv

1

Dwie rzeczy, powinieneś używać Django's GIS (GeoDjango) features i GIS plugin dla frameworku Django REST.

GeoDjango będzie natywnie pracować z bazą danych (prawdopodobnie PostGIS), aby dokładnie przechowywać i reprezentować dane geoprzestrzenne. Oznacza to, że nie będziesz musiał się martwić o normalizację lokalizacji, ponieważ są one ci dane, a Ty nie musisz ręcznie handle filtering - jak finding locations in a radius.

Wtyczka GIS zapewnia a DistanceToPoint filter, która brzmi dokładnie tak, jak tego szukasz. Możesz podać liczbę metrów wraz z punktem, który ma być używany jako środek, i usunie wszelkie wyniki, które wykraczają poza ten zakres. Umożliwi to korzystanie z wbudowanych widoków i serializerów frameworku Django bez potrzeby przetwarzania zapytań i samodzielnego stosowania filtrowania.

+0

Świetnie, właśnie o tym myślałem - Dzięki! – jwv