Уведомления

Группа в Telegram: @pythonsu

#1 Июль 29, 2012 11:49:16

pyOut
От:
Зарегистрирован: 2006-07-16
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

Группировка по дате

Приветствую,

Есть модель:

class UserActivityLog(models.Model):
    user = models.ForeignKey(User, related_name='user_activity_log', verbose_name=u'Пользовтель')
    created = models.DateTimeField(_(u'Создана'), auto_now_add=True)
    user_ip = models.IPAddressField(_(u'IP пользователя'), blank=True, null=True)
    class Meta:
        db_table = 'user_activity_log'
        ordering = ['-created']
        verbose_name = _(u'Активность пользователя')
        verbose_name_plural = _(u'Активность пользователей')
Нужно достать количество логинов пользователя в течении месяца с 1 число по последний календарный месяц. Причем если пользователь авторизировался в течении дня несколько раз то считать это за 1.

Начал делать запрос, но не могу его закончить:
login_count = (
        UserActivityLog.objects
        .filter(user_id=request.user.id)
        .count()
    )



Офлайн

#2 Июль 29, 2012 13:39:03

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Группировка по дате

Можно с помощью QuerySet.dates():

import datetime
 
start_date = datetime.date(2012, 7, 1)
end_date = datetime.date(2012, 7, 31)
login_count = UserActivityLog.objects.filter(
    user_id=request.user.id,
    created__range=(start_date, end_date),
).dates('created', 'day').count()

Или вручную
activities = UserActivityLog.objects.filter(
    user_id=request.user.id,
    created__range=(start_date, end_date),
).order_by('created')
login_count = sum(1 for _, _ in itertools.groupby(activities,
                                                  lambda x: x.created.day))

Отредактировано reclosedev (Июль 29, 2012 13:46:19)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version