dea*_*ase 8 django django-models django-orm
我正在寻找快速方法来计算过去30天内创建的模型对象,分别为每一天.例如:
27.07.2013 (today) - 3 objects created
26.07.2013 - 0 objects created
25.07.2013 - 2 objects created
...
27.06.2013 - 1 objects created
Run Code Online (Sandbox Code Playgroud)
我将在谷歌图表API中使用此数据.你知道如何有效地获得这些数据吗?
knb*_*nbk 23
items = Foo.objects.filter(createdate__lte=datetime.datetime.today(), createdate__gt=datetime.datetime.today()-datetime.timedelta(days=30)).\
    values('createdate').annotate(count=Count('id'))
Run Code Online (Sandbox Code Playgroud)
这将(1)过滤结果以包含最后30天,(2)仅选择createdate字段和(3)计算id,按所有选定字段(即createdate)进行分组.这将返回格式的字典列表:
[
    {'createdate': <datetime.date object>, 'count': <int>},
    {'createdate': <datetime.date object>, 'count': <int>},
    ...
]
Run Code Online (Sandbox Code Playgroud)
编辑:
我不相信有一种方法可以count == 0用SQL 来获取所有日期,即使是那些日期.你必须通过python代码插入每个缺少的日期,例如:
import datetime
# needed to use .append() later on
items = list(items)
dates = [x.get('createdate') for x in items]
for d in (datetime.datetime.today() - datetime.timedelta(days=x) for x in range(0,30)):
    if d not in dates:
        items.append({'createdate': d, 'count': 0})
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           9244 次  |  
        
|   最近记录:  |