如何在django注释中进行计算?
How to make calculation inside django annotate?
这个当我运行产生错误:
qs = UserLocation.objects.annotate(distance=0.5 - cos((F('lat')-lat1)*p)/2 + cos(lat1*p) * cos(F('lat')*p) * (1-cos((F('long')-lon1)*p))/2).all()
它产生的错误是这个:
must be real number, not CombinedExpression
如何将计算作为注释
尝试按照此处所述添加 ExpressionWrapper:
https://docs.djangoproject.com/en/3.2/ref/models/expressions/#using-f-with-annotations
qs = UserLocation.objects.annotate(distance=ExpressionWrapper(0.5 - cos((F('lat')-lat1)*p)/2 + cos(lat1*p) * cos(F('lat')*p) * (1-cos((F('long')-lon1)*p))/2).all(), output_field=FloatField())
我可能漏掉了一些 )
因为你的计算很复杂,我假设结果是一个浮点数
这个当我运行产生错误:
qs = UserLocation.objects.annotate(distance=0.5 - cos((F('lat')-lat1)*p)/2 + cos(lat1*p) * cos(F('lat')*p) * (1-cos((F('long')-lon1)*p))/2).all()
它产生的错误是这个:
must be real number, not CombinedExpression
如何将计算作为注释
尝试按照此处所述添加 ExpressionWrapper: https://docs.djangoproject.com/en/3.2/ref/models/expressions/#using-f-with-annotations
qs = UserLocation.objects.annotate(distance=ExpressionWrapper(0.5 - cos((F('lat')-lat1)*p)/2 + cos(lat1*p) * cos(F('lat')*p) * (1-cos((F('long')-lon1)*p))/2).all(), output_field=FloatField())
我可能漏掉了一些 )
因为你的计算很复杂,我假设结果是一个浮点数