每行2个日期之间的天数,然后将其全部添加到整个数据库中

时间:2018-09-19 15:26:04

标签: django django-queryset

models.py
class Orders(models.Model):
  orderid = models.IntegerField(db_column='orderID', primary_key=True)  
  pickupdate = models.DateField(db_column='pickupDate', blank=True, null=True)  
  returndate = models.DateField(db_column='returnDate', blank=True, null=True) 

我想为每一行用pickupdate(returndate-pickupdate)减去返回日期,然后将它们添加到整个表中

我尝试了下面的代码,但是产生了很大的十进制数字。

Orders.objects.aggregate(days=Sum( F('returndate') - F('pickupdate') )

我也尝试了下面的代码,但产生了错误

Orders.objects.aggregate(days=Sum( 'returndate' - 'pickupdate' )

2 个答案:

答案 0 :(得分:0)

您介意重复数天吗?如果不是,则可以使用一个范围来获取每一行pickupdatereturndate之间的总天数...

days = 0
for rec in Orders.objects.all():
    for n in range(int((rec.returndate - rec.pickupdate).days)+1):
        days += 1

+1是否取决于您要包含式计数(包括开始/结束日期)还是排他性计数(不包括结束日期)。

答案 1 :(得分:0)

您可以尝试

Orders.objects.annotate(diff=F('returndate') - F('pickupdate')).aggregate(days=Sum('diff'))