我有一個PointField的位置座標模型。我有一個MySQL函數,用於計算兩個點之間的距離,稱爲dist。我使用extra()「select」來計算查詢集中每個返回對象的距離。我還使用extra()「where」來過濾特定範圍內的那些對象。像這樣Django queryset count with extra select
query = queryset.extra(
select={
"distance":"dist(geomfromtext('%s'),geomfromtext('%s'))"%(loc1, loc2)
},
where=["1 having `distance` <= %s"%(km)]
) #simplified example
這工作正常獲取和閱讀的結果,除了當我嘗試計數結果集我得到「距離」是不是現場錯誤。在進一步探索之後,似乎count忽略了來自extra的「select」,而只是使用「where」。雖然完整的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參考CANDO這樣的事情?或者你可以使用另一個RDBMS? – jperelli