我想实现类似facebook的未读项目/通知。我目前有以下型号:
class UnreadItems(models.Model):
unread = models.BooleanField()
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
user = models.ForeignKey(User,null=True)
content_object = generic.GenericForeignKey('content_type','object_id')
class Meta:
db_table = 'unread_items'
每当有人向其他人创建对话/消息或其他内容时,我创建了一个以收件人为目标的新条目。但是,创建未读是很容易的,但是我应该如何以可管理的方式进行操作,以便在请求/查看资源时将项目标记为已读?
答案 0 :(得分:1)
一种选择是为此使用信号。
创建自定义信号[将提供的争论设置为所访问的项目]
创建一个注册到该信号的信号处理程序。在该信号中,可以访问与该项目对应的UnreadItem。
当您访问与UnreadItem链接的项目时(在相应的视图方法中),您将触发信号。
这个方案可以让你在中央信号处理程序中隔离你的逻辑来处理它的未读方面。
我认为您选择此设计的原因是因为您有多个可被视为未读的Item类型。使用此方案,您无需在任何地方传播处理Unread的逻辑。需要知道的所有视图都是触发信号。
答案 1 :(得分:0)
当您获取要查看的对象时,您可能需要在视图中执行此操作,或者您可以创建自定义管理器,以便在查询对象时自动将其标记为已读。