django最后30个入围名单

时间:2010-01-02 12:00:10

标签: django

在Django中使用这样的模型,如何在30天的条目中计算当天添加的数量。

class Entry(models.Model):
    ...
    entered = models.DateTimeField(auto_now_add=True)

1 个答案:

答案 0 :(得分:11)

获取最近30天的参赛作品非常简单:

today = datetime.date.today()
thirty_days_ago = today - datetime.timedelta(days=30)
entries = Entry.objects.filter(entered__gte=thirty_days_ago)

计算每天的数量是多么棘手,因为你要存储时间戳而不是数天 - 如果你使用的是DateField,你可以只进行简单的聚合。也许最好的办法是每天迭代并计算它们:

from collections import defaultdict
counts = defaultdict(int)
for entry in entries.order_by('entered'):
    date = entry.entered.date()
    days = (today - date).days
    counts[days] += 1

现在counts是一个字典,其键是今天之前的天数,值是当天的条目数。