django最后30个入围名单

boc*_*cca 3 django

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

class Entry(models.Model):
    ...
    entered = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)

Dan*_*man 11

获取最近30天的条目很简单:

today = datetime.date.today()
thirty_days_ago = today - datetime.timedelta(days=30)
entries = Entry.objects.filter(entered__gte=thirty_days_ago)
Run Code Online (Sandbox Code Playgroud)

计算每天的数量是多么棘手,因为你要存储时间戳,而不是几天 - 如果你使用的是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
Run Code Online (Sandbox Code Playgroud)

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