Model.py 中的 Django 计算在没有服务器重置的情况下不会更新

Posted

技术标签:

【中文标题】Model.py 中的 Django 计算在没有服务器重置的情况下不会更新【英文标题】:Django Calculations within Model.py don't update without a Server Reset 【发布时间】:2021-10-27 23:33:15 【问题描述】:

我的模型文件中有一些计算。

这样做的前提是我有一个每周更新的“汇率”,这会影响我最终的 html 表格中的 2/3 列。

我提出最新的汇率如下:

class Hedge_rate(models.Model):
    id = models.IntegerField(primary_key=True)
    Hedge_rate = models.DecimalField(max_digits=10, decimal_places=5)

    def __str__(self):
        return "%s" % (self.Hedge_rate)

V = Hedge_rate.objects.all().first()
latest_rate = V.Hedge_rate

那么,我的主要计算如下:

@property
def spot_amount(self):
    return self.usd_amount/latest_rate

我面临的问题是,假设“最新汇率”是当前的“2” - 如果我随后将此数字更新为“5”,则计算中的数字(以及如果我“打印”最新Rate') 将保持最新速率仍为 2。它仅在服务器重置时更新为 5。

我怀疑这是某种缓存问题?有没有办法在更新速率时在每次提交表单时触发缓存“擦除”?

解决这个问题的最佳方法是什么?

【问题讨论】:

【参考方案1】:

你应该在函数中获取最新的汇率,所以:

@property
def spot_amount(self):
    latest = Hedge_rate.objects.first()
    return self.usd_amount/latest.Hedge_rate

否则 Django 将在加载计算最新速率的文件时进行单个查询,并且永远不会更改它,无论是创建新的 Hedge_rate 对象,还是删除或更新最新的 Hedge_rate

【讨论】:

谢谢 - 这工作!这看起来很合乎逻辑,但我什至避免尝试它的原因是因为我的 PyCharm 应用程序没有在“最新”之后将“Hedge_rate”作为选项。在我的尝试中,所以认为它行不通。似乎这是一个比我的大脑更信任技术的案例 @OperGo:PyCharm 专业版支持 Django,但 PyCharm 本身并不能真正解释 Django,因为元类的逻辑数量太多,IDE 无法理解它。 【参考方案2】:

这不是缓存问题。查询Hedge_rate.objects.all().first() 仅在服务器启动或重新启动时执行一次,但当数据库中的值更新时,查询将不会再次运行。而是在计算金额时从数据库中获取最新值。

【讨论】:

以上是关于Model.py 中的 Django 计算在没有服务器重置的情况下不会更新的主要内容,如果未能解决你的问题,请参考以下文章

Django的模型与字段

django 反向生成models.py

如何从 django 管理面板中删除多余的“s”?

django下model.py模型的定义

Django model.py表单的默认值 默认允许为空

如何在 Django 1.7 中通过外键将 created_by 和 updated_by 用户添加到 model.py? [复制]