如何使用DatetimeField列在Django中获取过去7天内每小时的最后一个对象?

时间:2018-08-31 09:33:10

标签: python django django-models

我一直在做的工作是从名为“ Feeds”的表中过滤值,

该行每10分钟插入一次系统。 即。我将每小时的日期时间存储在每小时6行中,称为时间戳记。

我想过滤过去7天中每个这样的小时的最后一行。

这是我的代码。

class Feeds(models.Model):
    value = models.FloatField()
    timestamp = models.DateTimeField(auto_now_add=True)`

请帮助解决此问题。 谢谢。

1 个答案:

答案 0 :(得分:3)

获取最近7天的对象,然后每小时获取对象,并找到日期时间值最大的对象,排除其他对象。

d = datetime.now() - timedelta(days=7)
feeds = Feeds.objects.filter(timestamp__gte=d)
d = d.replace(minute=0, second=0, microsecond=0)
while d <= datetime.now():
    temp = feeds.filter(timestamp__range=(d, d + timedelta(hours=1)))
    if temp:
        temp = temp.exclude(timestamp=temp.all().order_by('-timestamp')[0].timestamp)
        for t in temp:
            feeds = feeds.exclude(timestamp=t.timestamp)            
    d += timedelta(hours=1)