Пишу от скуки еще-один-форум-на-джанге. С трэкингом все более или менее ясно, только вот решение в лоб муторное:
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 для других юзеров, к примеру. Только вот муторно этот код писать. Поэтому любопытно: существуют ли более простые способы трекинга?