LINUX.ORG.RU

Django-based forum, unread tracking

 ,


0

2

Пишу от скуки еще-один-форум-на-джанге. С трэкингом все более или менее ясно, только вот решение в лоб муторное:


class Object(models.Model):
    user = models.ForeignKey(User, null=True, blank=True, on_delete=models.SET_NULL, verbose_name=_('User'))
    parent = models.ForeignKey('self', null=True, blank=True, related_name='object_parent', verbose_name=_('Parent'))

    created_at = models.DateTimeField(_('Created at'), auto_now_add=True)
    updated_at = models.DateTimeField(_('Updated at'), auto_now=True)
    ip = models.GenericIPAddressField(_('IP'), blank=True, null=True)

    related_object_type = models.ForeignKey(ContentType, blank=True, null=True)
    related_object_id = models.PositiveIntegerField(blank=True, null=True)
    related_object = generic.GenericForeignKey('related_object_type', 'related_object_id')
    # related_object = generic.GenericForeignKey('related_object_type', 'id')

    children_depth_1 = models.PositiveIntegerField(_('Children at depth 1'), default=0)
    children_depth_2 = models.PositiveIntegerField(_('Children at depth 2'), default=0)

    class Meta:
        verbose_name = _('object')
        verbose_name_plural = _('Objects')
        ordering = ['id']

class GenericObjectReadTracker(models.Model):
    user = models.ForeignKey(User)
    generic_object = models.ForeignKey(Object)
    created_at = models.DateTimeField(auto_now=True)

(всё относящееся к форуму наследуется от Object, дабы потом иметь наглядное дерево и ленивые created_at, last_update, автоматические счетчики children, ip, owner: один фиг, почти любая сущность, создаваемая внутри форума, обладает той или иной частью этих полей)

А это значит, что потом нужно этот треш удалять: проверять, а не являются ли уже все топики unread, или является ли весь форум read и т.д. Сама по себе фишка полезная: можно смотреть чем интересуется юзер и на этом делать suggestions для других юзеров, к примеру. Только вот муторно этот код писать. Поэтому любопытно: существуют ли более простые способы трекинга?

Ладно, божественный класс, но нафига его в бд пихать? На это тебе бд не жалко, а на м2м жалко?

Я в своём ещё-одном-форуме-на-джанго храню не только факт того, был ли топик прочитан, но и дату последнего прочтения (в плане архитектуры бд вообще пофиг), в итоге можно ещё и отслеживать прочитанные комментарии и выводить их отдельно.

Kalashnikov ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.