我的网站中有一个积分奖励方法,我想创建一个“过去 10 天内排名靠前的用户”列表。现在我在配置文件模型中存储和更新用户分数,即:
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, null=True)
points = models.IntegerField(default=0)
但我想获取此“点”实例的值(例如 10 天前),以便将其与最新值进行比较。我怎样才能实现这个目标?
最佳答案
一般来说,没有办法检查数据库字段的先前值。 AWS RDS 有一些与此接近的功能,但它们用于灾难恢复/取证目的,不适合频繁使用。
这意味着您必须将历史数据存储在自己的某个地方。
一种简单的方法是选择一个截止时间,例如每天,并记录当时的每个分数。根据您的需求,有许多合理的设计 - 一个非常简单的设计是向配置文件添加一个字段,用于存储过去 10 天截止时间的用户分数的 JSON 列表。然后安排一个在截止时间运行的作业,将当前分数添加到列表中,并删除最旧的分数。
一个更强大和更昂贵的解决方案是跟踪每个点的变化。使用架构(ProfileId、PointChange、Date)创建一个新表,并在每次有人获得或失去分数时添加一行。存储整个历史记录后,您可以构建一个查询来回答有关先前状态的任何可能的问题。您可能希望运行一个清理作业来删除日期足够旧的数据,因为该表可能会增长得非常快。
关于python - 如何在Django中获取指定时间模型实例的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48566279/