从筛选结果中获取今天日期的操作计数
我有一个用户可以一天做很多次的操作。我想统计一下用户今天做了多少次这个操作。目前我用的方法是这样的,但我觉得应该有更简单的方法。我感觉我可以把这个问题用一行代码解决。:)
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
。