Получение подсчета действий от сегодняшней даты из отфильтрованных результатов в Python - PullRequest
0 голосов
/ 27 февраля 2011

У меня есть действие, которое пользователь может выполнять много раз в день. Я пытаюсь подсчитать, сколько раз пользователь предпринял это действие, но только за сегодняшнюю дату. Вот способ, которым я сейчас решаю эту проблему, но есть ли более простой способ? Я чувствую, что должен быть в состоянии уместить это в одну строку. :)

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 ]

2 голосов
/ 27 февраля 2011
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 явно.

0 голосов
/ 27 февраля 2011

Благодаря Юджи (ниже) мы придумали этот ответ:

slap_count = Slap.objects.filter(from_user=request.user.id, date__gte=datetime.today().date()).count()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...