在 Django 注释中执行三角运算或任何数学表达式
Perform trigonometric operations or any mathematical expression in Django annotate
我有一个 table,它有纬度和经度字段。
`
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)
`
如何在进行数据库查询时对数据执行此等效数学运算并将值存储在列表中。
Django supports negation, addition, subtraction, multiplication, division, modulo arithmetic, and the power operator on query expressions, using Python constants, variables, and even other expressions.
要将 sin 和 cos 等三角函数作为查询表达式执行,您需要Func()
expressions在查询集中包含数据库函数
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
)
)
)
我有一个 table,它有纬度和经度字段。
`
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)
`
如何在进行数据库查询时对数据执行此等效数学运算并将值存储在列表中。
Django supports negation, addition, subtraction, multiplication, division, modulo arithmetic, and the power operator on query expressions, using Python constants, variables, and even other expressions.
要将 sin 和 cos 等三角函数作为查询表达式执行,您需要Func()
expressions在查询集中包含数据库函数
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
)
)
)