2015-05-02 8 views
7

Ho un modello che memorizza una posizione utenti:Django Rest Framework - Come limitare i risultati restituiti con la geolocalizzazione?

[ 
{ 
    "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 
}, 

io sto cercando di realizzare un sistema che permette agli utenti di interrogare e vedere chi altro si trova nelle vicinanze, ma per motivi di sicurezza vorrei per limitare i risultati agli utenti con dire 1KM.

Qual è il modo migliore per raggiungere questo obiettivo?

P.S - Lo "stato" è legato al modello utente normale nel modello django utilizzando oneToOneField.

risposta

2

Quello che stai cercando è la possibilità di interrogare/filtrare per geolocalizzazione. Dai uno sguardo allo GeoDjango.

Una volta eseguito il filtro del modello() con un intervallo geografico, è solo questione di applicarlo all'APIView con django-rest-framework.

+0

Perfetto! - Grazie – jwv

1

Due cose, dovresti usare Django's GIS (GeoDjango) features e lo GIS plugin per il framework Rango di Django.

GeoDjango funzionerà in modo nativo con il database (probabilmente PostGIS) per archiviare e rappresentare accuratamente i dati geospaziali. Ciò significa che non dovrai preoccuparti di normalizzare le posizioni come ti vengono date e non dovrai manualmente impostare handle filtering - come finding locations in a radius.

Il plug-in GIS fornisce a DistanceToPoint filter che sembra esattamente quello che stai cercando. Puoi passare il numero di metri insieme al punto da usare come centro e rimuoverà qualsiasi risultato che non rientra nell'intervallo. Ciò ti consentirà di utilizzare le viste e i serializzatori incorporati del framework Django REST senza dover elaborare i set di query e applicare il filtro da solo.

+0

Grande, è esattamente quello che stavo pensando - Grazie! – jwv

Problemi correlati