您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使用余弦球定律按Django中的接近度过滤邮政编码

使用余弦球定律按Django中的接近度过滤邮政编码

有可能在Django中执行原始SQL查询

我的建议是,编写查询提取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已有几个月的时间了,但是它应该遵循正确的原则。

Go 2022/1/1 18:41:44 有445人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶