SELECT (some_fields_here)
FROM "places_place"
WHERE ST_distance_sphere("places_place"."location", %s) < 1000.0
Когда я пытаюсь использовать сделать то же самое с __dwithin, я получаю сообщение об ошибке:
Place.objects.filter(location__dwithin=(p.location, D(km=1))).query.as_sql()
TypeError: Only numeric values of degree units are allowed on geographic DWithin queries.
Поэтому мне пришлось изменить запрос, чтобы не использовать объект D:
SELECT (some fields here)
FROM "places_place"
WHERE ST_DWithin("places_place"."location", %s, 1)
Резюме:
__dwithin
- принимает значения градуса как параметр расстояния.
- использует ST_DWithin функцию SQL.
__distance_lt
- может принимать другие значения расстояния;).
- использует ST_distance_sphere функцию SQL.
Btw, я получаю разные результаты с обоими запросами, но я предполагаю, что это в основном связано с тем, что я не знаю, какое значение "степени" использовать.