Django计算ORM中行之间的差异

Django计算ORM中行之间的差异,django,django-orm,Django,Django Orm,我试图做的是避免在检索queryset后进行的可能非常昂贵的计算,但在查询过程中进行计算,但我不确定这是否可行 例如,如果我有如下模型: class DailyUsers(model.Model): date = models.DateField() users = models.IntegerField() 我做了如下注释: queryset = models.DailyUsers.annotate( unique_users=Window( UnionAggCardin

我试图做的是避免在检索queryset后进行的可能非常昂贵的计算,但在查询过程中进行计算,但我不确定这是否可行

例如,如果我有如下模型:

class DailyUsers(model.Model):
  date = models.DateField()
  users = models.IntegerField()
我做了如下注释:

queryset = models.DailyUsers.annotate(
  unique_users=Window(
    UnionAggCardinality(F("users")),
    order_by=F("date").asc(),
  )
).values("date", "unique_users")
>> [
     {"date": "2020-01-01", "users": 10}
     {"date": "2020-01-02", "users": 10}
     {"date": "2020-01-03", "users": 20}
     {"date": "2020-01-04", "users": 20}
     {"date": "2020-01-05", "users": 21}
   ]
然后,我需要执行以下计算:

queryset = list(queryset)
result_list = [obj["result"] for obj in queryset]
for i in range(1, len(queryset)):
  queryset[i]["result"] = result_list[i] - result_list[i-1]
>> [ 
     {"date": "2020-01-01", "users": 10}
     {"date": "2020-01-02", "users": 0}
     {"date": "2020-01-03", "users": 10}
     {"date": "2020-01-04", "users": 0}
     {"date": "2020-01-05", "users": 11}
   ]
该计算实质上是将前几天的用户数从当前日期中减去新值(跳过第一天)

在orm中有这样做的方法吗?理想情况下,我会使用
窗口
滞后
函数,但不能嵌套窗口函数