实现对消息的未读/读取检查

时间:2013-02-19 18:14:55

标签: django

我有一个消息模型。对于这个模型,我想添加一个读/未读字段,我通过使用布尔字段来完成。现在,如果有人读取此消息,我希望此布尔字段变为true。我在我的应用程序的不同部分访问这些消息,因此手动更新字段将是乏味的。

有什么办法可以根据某些条件获取一些消息,当从db中获取消息时,该字段会自动更新吗?

2 个答案:

答案 0 :(得分:2)

为什么不在custom model manager上创建read_message()方法。让此方法返回您想要的消息,同时还更新返回的每条消息的字段。

您可以使用新方法将Message.objects.get()替换为Message.objects.read_message()

class MessageManager(models.Manager):
    def read_message(self, message_id):
        # This won't fail quietly it'll raise an ObjectDoesNotExist exception
        message = super(MessageManager, self).get(pk=message_id)
        message.read = True
        message.save()
        return message

然后在您的模型中包含经理 -

class Message(models.Model):
    objects = MessageManager()

显然,您可以编写其他返回查询集的方法,同时将所有返回的消息标记为已读。

如果您不想更新代码(您调用Message.objects.get()的地方),那么您可以实际覆盖get(),以便更新read字段。只需将上面的read_message功能名称替换为get

即可

答案 1 :(得分:1)

根据您的数据库管理系统,您可以安装触发器:

PostgreSQL:http://www.postgresql.org/docs/9.1/static/sql-createtrigger.html

MySQL:http://dev.mysql.com/doc/refman/5.0/en/triggers.html

SQLite:http://www.sqlite.org/lang_createtrigger.html

当然,这需要在数据库中手动完成 - 在Django应用程序之外。