0

我有一张包含纬度和经度字段的表格。

`

location.objects.annotate( distance =math.fabs(math.pow((math.sin( 
                    F('latitude') - float(90.378770)) /2 )),2) + 
                    math.cos(90.378770) * math.cos( F('latitude')) * 
                    pow((math.sin(  (F('longitude') - float(-59.826830)) /2)),2) )
                   ).values_list('distance', flat=True)

`

如何在进行数据库查询时对数据执行这种等效的数学运算并将值存储在列表中。

4

1 回答 1

2

根据文档

Django 支持查询表达式上的求反、加法、减法、乘法、除法、模算术和幂运算符,使用 Python 常量、变量甚至其他表达式。

要将诸如 sin 和 cos 之类的三角运算作为查询表达式执行,您需要Func()表达式来涉及查询集中的数据库函数

from django.db.models import F, Func


class Sin(Func):
    function = 'SIN'

class Cos(Func):
    function = 'COS'


latitude = 90.378770
longitude = -59.826830


Location.objects.annotate(
    distance=(
        Sin((F('latitude') - latitude)/2)**2 +
        (
            Cos(F('latitude'))*Cos(latitude)*
            Sin((F('longitude') - longitude)/2)**2
        )
    )
)
于 2019-01-11T22:38:32.627 回答