lvhuiyang
2021-03-23 10:41:40 +08:00
如果 ORM 中没有针对于当前特定业务的实现的话,手动处理下也不繁琐。大概想到两种方式:
- 1. 帖子开头描述的遍历一个月的所有日期,进行 30 次左右的 query 。
- 2. 上面用 annotate 一个 query 语句按照 day of month 进行 group by 查询出每天的销售额,然后用 Python 进行逻辑上的累加。
```python
In [9]: from collections import OrderedDict
In [10]: od = OrderedDict([('2020-01-01', 10), ('2020-01-02', 12), ('2020-01-03', 15)])
In [11]: pre_value = 0
...: result = OrderedDict()
...: for k, v in od.items():
...: pre_value += v
...: result[k] = pre_value
...:
In [12]: result
Out[12]: OrderedDict([('2020-01-01', 10), ('2020-01-02', 22), ('2020-01-03', 37)])
```
对比第 1 种多次查询带来的开销,第 2 种的 Python 累加的开销可以忽略不计,要我我选第 2 种实现。