Pokud chcete seřadit každý záznam na tomto stole podle vzdálenosti, bude to podle očekávání pomalé a nedá se nic dělat (toho jsem si v tuto chvíli a svých znalostí vědom).
Výpočet můžete zefektivnit provedením těchto kroků a vytvořením některých předpokladů:
-
Povolit prostorové indexování na vašich stolech. Chcete-li to provést v GeoDjango, postupujte podle pokyny k dokumentu a přizpůsobte je svému modelu:
-
Nyní můžete svůj dotaz zúžit pomocí některých logických omezení:
Příklad: Můj uživatel nebude hledat lidi vzdálenější než 50 km od jeho aktuální pozice.
-
Zúžit vyhledávání pomocí
dwithin
prostorové vyhledávání, které využívá výše uvedené prostorové indexování , takže je to docela rychlé. -
Nakonec použijte
distance
seřaďte podle na zbývajících řádcích.
Konečný dotaz může vypadat takto:
current_location = me.location
people = People.objects.filter(
location__dwithin=(current_location, D(km=50))
).annotate(
distance=Distance('location', current_location)
).order_by('distance')
P.S: Spíše než vytvoření vlastního pokusu o stránkování je efektivnější použít metody stránkování poskytované pro zobrazení django:
Nebo můžete použít Django Rest Framework a použít jeho stránkování: