在我的数据库中,我有两个日期字段,然后使用来计算这两个日期之间的差值
.annotate(delay=F('date_1') - F('date_2'))
现在我必须将此延迟乘以数据库中的另一列
F('delay')*F('amount')
但是遇到错误,也尝试通过追加天数来解决问题,
.annotate(a=Sum(F('delay')*F('amount')))
“延迟”是日期之间的差,金额是表中存在浮动数据类型的列。
答案 0 :(得分:0)
假设您正在使用 MYSQL 数据库,并且模型为
class MyTime(models.Model):
start = models.DateTimeField()
end = models.DateTimeField()
amount = models.IntegerField()
然后,将Custom DB Function定义为
from django.db.models.functions import Func
class DateDIFF(Func):
function = 'TIMESTAMPDIFF'
template = "%(function)s(day, %(expressions)s)"
然后尝试查询为
from django.db.models import IntegerField, F
MyTime.objects.annotate(diff_date=DateDIFF(F('start'), F('end'), output_field=IntegerField())).annotate(
result=F('diff_date') * F('amount'))
示例
In [7]: from django.db.models import IntegerField, F
...:
...: queryset = MyTime.objects.annotate(diff_date=DateDIFF(F('start'), F('end'), output_field=IntegerField())).annotate(
...: result=F('diff_date') * F('amount'))
...:
In [8]: queryset
Out[8]: [<MyTime: MyTime object>]
In [9]: queryset[0].__dict__
Out[9]:
{'_state': ,
'id': 1,
'start': datetime.datetime(2018, 8, 2, 12, 6, 51, tzinfo=),
'end': datetime.datetime(2018, 8, 9, 12, 6, 52, tzinfo=),
'amount': 50,
'diff_date': 7,
'result': 350}