python - 如何在Django中获取指定时间模型实例的值?

标签 python django

我的网站中有一个积分奖励方法,我想创建一个“过去 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/

相关文章:

python - 解码文本信息的字典

python - 如何在 MS Windows 操作系统上使用 Google 的 repo 工具?

python - 如何使用 django 每隔几秒运行一次后台作业

python - 创建一个可调用函数来生成 django 模型中的属性值

python - 类型错误 : Object of type 'int32' is not JSON serializable

python - 自身的类子类。为什么禁止相互子类化?

python - 当我想稍后填充数据时,django模型抛出IntegrityError : (1048, "Column ' xxx'不能为空”)

python - 使用 GNU parallel 并行化 bash for 循环

python - Factory Boy 及相关对象创建

python - 多数据库和非托管模型 - 测试用例失败