У меня есть модель с PointField для координат местоположения. У меня есть функция MySQL, которая вычисляет расстояние между двумя точками, которое называется dist. Я использую extra() «select» для вычисления расстояния для каждого возвращаемого объекта в наборе запросов. Я также использую extra() «где» для фильтрации тех объектов, которые находятся в определенном диапазоне. Как этоСчетчик запросов Django с дополнительным выбором
query = queryset.extra(
select={
"distance":"dist(geomfromtext('%s'),geomfromtext('%s'))"%(loc1, loc2)
},
where=["1 having `distance` <= %s"%(km)]
) #simplified example
Это прекрасно работает для получения и чтения результатов, за исключением того, когда я пытаюсь подсчета результирующего я получаю ошибку, что «расстояние» не является полем. После изучения немного дальше, кажется, что счет игнорирует «выбор» из дополнительного и просто использует «где». В то время как полный SQL-запрос выглядит следующим образом:
SELECT (dist(geomfromtext('POINT (-4.6858300000000003 36.5154300000000021)'),geomfromtext('POINT (-4.8858300000000003 36.5154300000000021)'))) AS `distance`, `testmodel`.`id`, `testmodel`.`name`, `testmodel`.`email`, (...) FROM `testmodel` WHERE 1 having `distance` <= 50.0
Количество запросы намного короче и не имеет DIST части выбора:
SELECT COUNT(`testmodel`.`id`) FROM `testmodel` WHERE 1 having `distance` <= 50.0
Логически, MySQL выдает ошибку, потому что «расстояние» является не определено. Есть ли способ сказать Django, он должен включить дополнительный выбор для счета?
Спасибо за любые идеи!
вы должны придерживаться MySQL? или вы можете использовать другую СУБД? – jperelli