Python 如何保存与模型相关的多个更改的信息

Python 如何保存与模型相关的多个更改的信息,python,django,Python,Django,我们将尝试做一个一般性的例子: 我有一个“材料”模型,外键是“价格”。 在2020年,“材料”只有一个价格,但在2021年,我想改变“价格”,但仍要跟踪价格变化的历史 2020年“材料”消耗的总成本不应因为2021年的“价格”变化而变化 在Python/Django中是否有处理此问题的通用策略?将价格作为一个模型,如下所示 class Prices(models.Model): material = models.ForeignKey(Material,...) year =

我们将尝试做一个一般性的例子: 我有一个“材料”模型,外键是“价格”。 在2020年,“材料”只有一个价格,但在2021年,我想改变“价格”,但仍要跟踪价格变化的历史

2020年“材料”消耗的总成本不应因为2021年的“价格”变化而变化


在Python/Django中是否有处理此问题的通用策略?

将价格作为一个模型,如下所示

class Prices(models.Model):
     material = models.ForeignKey(Material,...)
     year = models.IntegerField()
     prices = models.DoubleField()

然后你可以得到某一年某一材料的价格。

将价格作为一个模型,如下所示

class Prices(models.Model):
     material = models.ForeignKey(Material,...)
     year = models.IntegerField()
     prices = models.DoubleField()

然后你可以得到某一年某一材料的价格。

让你的“消费”(或你叫它什么名字)模型也有一个外键,指向
价格
@AbdulAzizBarkat不,它没有。这是其他模型的共同策略吗?对每个潜在的聚合使用一个模型?你想跟踪消费量,对吗?这不意味着它应该是数据库模式中的一个实体吗?无论如何,尽管我从未使用过Clojure/Datomic,但我确信它只是用当年的额外数据进行复制。因此,我建议的外键策略很可能与那里的做法非常相似。无论如何,你用一种非常抽象的方式描述你的问题,也许如果你把你的模型放在问题中,你的意思会更清楚。我将尝试用一个更具体的例子来扩展这个问题。Datomic保留每次更改的副本。因此,您将始终知道在给定时间内的事实。让您的“消费”(或无论您如何命名)模型也有一个外键,指向
Price
@AbdulAzizBarkat不,它没有。这是其他模型的共同策略吗?对每个潜在的聚合使用一个模型?你想跟踪消费量,对吗?这不意味着它应该是数据库模式中的一个实体吗?无论如何,尽管我从未使用过Clojure/Datomic,但我确信它只是用当年的额外数据进行复制。因此,我建议的外键策略很可能与那里的做法非常相似。无论如何,你用一种非常抽象的方式描述你的问题,也许如果你把你的模型放在问题中,你的意思会更清楚。我将尝试用一个更具体的例子来扩展这个问题。Datomic保留每次更改的副本。所以你总是知道在给定的时间里事实发生了什么。这是一个解决办法。在本例和示例中,价格似乎是合理的,可以为每种材料持续创造价格。这是一个解决办法。在这个例子中,价格似乎是合理的,可以为每种材料不断创造。