2015-11-05 3 views
0

У меня есть приложение для чата в Интернете, сделанное в Django. Пользователи могут создавать группы, в которых могут собираться другие пользователи, оставлять сообщения (replies) и фотографии. URL каждый пользователь посещает доступ к группе является:Tricky logic для расчета уникальных недавних посетителей в приложении Django

url(r'^group/(?P<pk>\d+)/reply/$', auth(GroupView.as_view()), name="group_reply"), 

где pk является group.pk.

Мой вопрос: Как я могу получить список (или набор) всех пользователей, которые обратились к URL определенной группы за последние 5 минут? По сути, я пытаюсь рассчитать число уникальных последних посетителей для каждой группы. Кажется, я не могу окунуться в голову, как это сделать, хотя я думаю, что информация о сеансах могла бы помочь? (Я использую django user_sessions в этом проекте, который

«делает сеанс объекты первого класса гражданин, как и другие объекты ОРМ»

).


В случае необходимости, модель позади группы:

class Group(models.Model): 
    topic = models.TextField(validators=[MaxLengthValidator(200)], null=True) 
    rules = models.TextField(validators=[MaxLengthValidator(500)], null=True) 
    owner = models.ForeignKey(User) 
    private = models.CharField(max_length=50, default=0) 
    category = models.CharField(choices=TYPE, default=1, max_length=25) 
    created_at = models.DateTimeField(auto_now_add=True) 

И модель за размещение ответ в каждой группе:

class Reply(models.Model): 
    text = models.TextField(validators=[MaxLengthValidator(500)]) 
    which_group = models.ForeignKey(Group) 
    writer = models.ForeignKey(User) 
    submitted_on = models.DateTimeField(auto_now_add=True) 
    image = models.ImageField(upload_to=upload_pic_to_location, null=True, blank=True) 

И User является ваниль django.contrib.authuser.

ответ

0

У вас нет ничего собирающего данные, которые вам нужны. Если вы хотите записывать посещения страницы, вам нужно будет создать модель для этого; простой с FK для пользователя (для посетителя) и Group (для посещенной группы) плюс отметка времени, должно быть достаточно. Затем ваш GroupView может делать запись в этой таблице каждый раз, когда пользователь посещает.

+0

Чтобы уточнить, я хочу измерять * уникальные посещения *, поэтому я должен использовать 'distinct ('user')' в запросе модели, которую вы упомянули в своем ответе? –

Смежные вопросы