从筛选结果中获取今天日期的操作计数

0 投票
2 回答
649 浏览
提问于 2025-04-16 12:36

我有一个用户可以一天做很多次的操作。我想统计一下用户今天做了多少次这个操作。目前我用的方法是这样的,但我觉得应该有更简单的方法。我感觉我可以把这个问题用一行代码解决。:)

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

感谢Yuji(下面的回答),我们得出了这个答案:

slap_count = Slap.objects.filter(from_user=request.user.id, date__gte=datetime.today().date()).count()
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

撰写回答