为用户组内的消息设置 "viewed" 属性的最佳方法?
Best way to make "viewed" attribute for messages inside user group?
我正在决定如何跟踪用户是否在时间轴中看到 post。
有Post
和Comment
这样的模型。
class Comment(models.Model):
author = models.ForeignKey('UserProfile')
title = models.CharField(max_length=255)
text = models.TextField(null=True, blank=True)
date_created = models.DateTimeField()
post = models.ForeignKey('Post', related_name='comments')
class Post(ContentTypeModel):
title = models.CharField(max_length=255)
group = models.ForeignKey('UserGroup', null=True)
date_updated = models.DateTimeField()
有关如何跟踪 post
是否已被用户 group
的特定成员看到的最佳做法的建议会很好。
我设法按照建议去做,即添加 m2m 关系以跟踪查看 post 的人:
class Post(models.Model):
...
date_updated = models.DateTimeField()
viewers = models.ManyToManyField('UserProfile', through='PostViewer')
class PostViewer(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE)
viewer = models.ForeignKey('UserProfile', on_delete=models.CASCADE, related_name='posts_seen')
last_seen = models.DateTimeField(null=True, blank=True, help_text='Is set when user sees the post in details')
class Meta:
unique_together = ('post', 'viewer')
这样我就可以将 post.date_updated
与 viewer.last_seen
进行比较,并对谁看过 Post 的 update/create 进行过滤。
我正在决定如何跟踪用户是否在时间轴中看到 post。
有Post
和Comment
这样的模型。
class Comment(models.Model):
author = models.ForeignKey('UserProfile')
title = models.CharField(max_length=255)
text = models.TextField(null=True, blank=True)
date_created = models.DateTimeField()
post = models.ForeignKey('Post', related_name='comments')
class Post(ContentTypeModel):
title = models.CharField(max_length=255)
group = models.ForeignKey('UserGroup', null=True)
date_updated = models.DateTimeField()
有关如何跟踪 post
是否已被用户 group
的特定成员看到的最佳做法的建议会很好。
我设法按照建议去做,即添加 m2m 关系以跟踪查看 post 的人:
class Post(models.Model):
...
date_updated = models.DateTimeField()
viewers = models.ManyToManyField('UserProfile', through='PostViewer')
class PostViewer(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE)
viewer = models.ForeignKey('UserProfile', on_delete=models.CASCADE, related_name='posts_seen')
last_seen = models.DateTimeField(null=True, blank=True, help_text='Is set when user sees the post in details')
class Meta:
unique_together = ('post', 'viewer')
这样我就可以将 post.date_updated
与 viewer.last_seen
进行比较,并对谁看过 Post 的 update/create 进行过滤。