Фильтрация почтовых индексов по близости в Джанго со сферическим законом косинусов
Я пытаюсь справиться с поиском близости для поиска базового магазина в Джанго. Вместо того, чтобы использовать PostGIS с моим приложением, чтобы я мог использовать дистанционный фильтр GeoDjango, я бы хотел использовать формальную формулу Сферического закона косинусов в запросе модели. Я бы хотел, чтобы все расчеты выполнялись в базе данных за один запрос, для эффективности.
Пример запроса MySQL из Интернета, реализующего Сферический Закон Косинусов, подобный этому:
SELECT id, (
3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) *
cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) *
sin( radians( lat ) ) )
)
AS distance FROM stores HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;
Запрос должен ссылаться на Zipcode ForeignKey для значений lat / lng каждого магазина. Как я могу заставить все это работать в запросе модели Django?