0

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

有什么方法可以根据某些条件获取一些消息,并且当从数据库中获取消息时,该字段会自动更新?

4

2 回答 2

2

为什么不在自定义模型管理器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.

于 2013-02-19T18:25:42.180 回答
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 应用程序之外。

于 2013-02-19T18:25:06.877 回答