2015-05-02 5 views
7

Ich habe ein Modell, das einen Benutzer Ort speichert:Django Rest Framework - Wie beschränke ich die mit Geolocation zurückgegebenen Ergebnisse?

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

Ich versuche, ein System zu schaffen, die Benutzer, die sonst in der Nähe abfragen kann und sehen, aber aus Sicherheitsgründen würde ich die Ergebnisse für die Nutzer beschränken möchte mit sagen 1 KM.

Was ist der beste Weg, dies zu erreichen?

P.S. - Der "Status" ist mit einem OneToOneField an das normale Benutzermodell im Django-Modell gebunden.

Antwort

2

Was Sie suchen, ist die Fähigkeit, nach Geolocation abzufragen/zu filtern. Werfen Sie einen Blick auf GeoDjango.

Sobald Sie den Modellfilter() mit einem geografischen Bereich ausführen können, müssen Sie ihn nur mit django-rest-framework auf Ihren APIView anwenden.

+0

Perfekt! - Vielen Dank – jwv

1

Zwei Dinge sollten Sie verwenden Django's GIS (GeoDjango) features und die GIS plugin für Django REST-Framework.

GeoDjango arbeitet nativ mit Ihrer Datenbank (wahrscheinlich PostGIS), um die Geodaten präzise zu speichern und darzustellen. Das bedeutet, dass Sie sich keine Gedanken darüber machen müssen, wie die Standorte normalisiert werden, und Sie müssen nicht manuell handle filtering - wie finding locations in a radius.

Das GIS-Plugin bietet a DistanceToPoint filter, die genau das, was Sie suchen, klingt. Sie können die Anzahl der Meter zusammen mit dem Punkt übergeben, der als Mittelpunkt verwendet werden soll, und alle Ergebnisse, die außerhalb dieses Bereichs liegen, werden entfernt. Dadurch können Sie die integrierten Ansichten und Serializer von Django REST Framework verwenden, ohne die Abfragesätze verarbeiten und die Filterung selbst anwenden zu müssen.

+0

Großartig, genau das habe ich mir gedacht - Danke! – jwv

Verwandte Themen