我有一个用户每天可以做多次的动作。我试图计算用户采取该操作的次数,但仅限于今天的日期。这是我目前解决这个问题的方式,但有更简单的方法吗?我觉得我应该能够把它放在一条线上。 :)
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()
但这显然是一个关键字不能表达的错误。对不起,如果这是一个基本的,但想法?
答案 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()