【问题标题】:Django Calculations within Model.py don't update without a Server ResetModel.py 中的 Django 计算在没有服务器重置的情况下不会更新
【发布时间】: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。

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

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

【问题讨论】:

    标签: python django caching model


    【解决方案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() 仅在服务器启动或重新启动时执行一次,但当数据库中的值更新时,查询将不会再次运行。而是在计算金额时从数据库中获取最新值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多