从今天的日期开始计算Python中的过滤结果

时间:2011-02-27 04:06:02

标签: python django datetime

我有一个用户每天可以做多次的动作。我试图计算用户采取该操作的次数,但仅限于今天的日期。这是我目前解决这个问题的方式,但有更简单的方法吗?我觉得我应该能够把它放在一条线上。 :)

today_slaps = 0
slaps = Slap.objects.filter(from_user=request.user.id)
for slap in slaps:
    if slap.date.date() == datetime.now().date():
        today_slaps += 1

我正在寻找的逻辑是:

slaps = Slap.objects.filter(from_user=2, date.date()=datetime.now().date()).count()

但这显然是一个关键字不能表达的错误。对不起,如果这是一个基本的,但想法?

2 个答案:

答案 0 :(得分:2)

slap_count = Slap.objects.filter(from_user=request.user, \ 
                      date__gte=datetime.date.today()).count()

# specifically setting datetimefield=datetime.date.today() won't work
# gte = will work for datetimefield vs datetime object starting at that date
# it's also assumed there will never be a slap from the future. 

生成以下SQL:

SELECT ... FROM ... WHERE ... date >= 2011-02-26 00:00:00 

所以可以肯定地说,除非你有未来的打击,否则你只能获得今天的打击。如果你这样做,我会明确地设置每个date__day, date__year, date__month

答案 1 :(得分:0)

感谢Yuji(下方),我们提出了这个答案:

slap_count = Slap.objects.filter(from_user=request.user.id, date__gte=datetime.today().date()).count()