django实现未读项

django实现未读项,django,django-models,Django,Django Models,我想实现一些类似facebook的未读项目/通知。我目前有以下型号: class UnreadItems(models.Model): unread = models.BooleanField() content_type = models.ForeignKey(ContentType) object_id = models.PositiveIntegerField() user = models.ForeignKey(User,null=True) co

我想实现一些类似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'

每当有人向其他人创建对话/消息或其他内容时,我都会以收件人为目标创建一个新条目。但是,创建未读是很容易的,但是我应该如何以可管理的方式进行创建,以便在请求/查看资源时将项目标记为已读???

当获取要查看的对象时,您需要在视图中执行此操作,或者,您可以创建一个自定义管理器,在查询对象时自动将其标记为已读。

一个选项是为此使用信号

创建自定义信号[将提供参数设置为访问的项目]

创建一个注册到该信号的信号处理程序。在该信号中,hander访问对应于该项的未读项

当您访问与未编辑项链接的项目时(在适当的视图方法中),您将触发该信号

此方案将允许您在中央信号处理程序中隔离处理未读方面的逻辑


我认为您选择此设计的原因是因为您有多个可以视为未读的项目类型。使用此方案,您不必将处理未读数据的逻辑散布到任何地方。视图需要知道的只是触发信号。

听起来很合乎逻辑。但有时,如果我只想计算未读项目,我不想将其设置为未读。与使用自定义管理器相比,信号是否可以这样做?请进一步解释“计算未读项目”的含义?如果您想询问是否要计算给定用户的未读项目数,则可以执行诸如UnderItems.objects.filter(user=u).count()之类的正向查询。如果您试图为用户查找给定类型的未读项目,还可以按内容类型对其进行筛选。使用content_types框架查找给定模型的类型,然后在过滤器查询中使用than。请记住:信号对于操作对象(CRUD)非常有用。如果您只想查找计数,可以在视图中查找