我的建议是,编写查询以提取ID列表(看起来像您现在正在执行的操作),然后使用ID提取关联的模型(在常规的非原始sql Django查询中)。尝试使您的sql尽可能独立于方言,这样一来,即使您必须切换数据库,也不必担心另一件事。
为了澄清,这是一个如何做的例子:
def get_models_within_25 (self):
from django.db import connection, transaction
cursor = connection.cursor()
cursor.execute("""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;""")
ids = [row[0] for row in cursor.fetchall()]
return MyModel.filter(id__in=ids)
作为免责声明,我不能保证这段代码,因为我编写任何Django已有几个月的时间了,但是它应该遵循正确的原则。