【问题标题】:Django object versionsDjango 对象版本
【发布时间】:2012-11-26 02:56:18
【问题描述】:

我希望能够在我的数据库中存储带有版本的对象。因此,每当对象发生更改时,都会创建一个具有更高版本的新对象。这允许来自其他模型的对象仍然使用旧版本的对象。

我不想对我的模型进行版本控制,而是对我的对象进行版本控制。

示例: 假设对于网上商店,一种型号是商品,另一种是订单。如果某个客户下订单,他当然想购买他在下订单时看到的商品。但是如果商品价格发生变化,这应该不会对已经下的订单产生任何影响,而只会影响未来的订单。

【问题讨论】:

  • 你需要给一些代码sn-p来更好地解释你的观点。
  • @AnkurGupta 这是一个更普遍的问题。不特定于我的模型。
  • 你后面举的例子很有帮助。

标签: python django


【解决方案1】:

我认为这不是网上商店示例的实用解决方案,因为您只需要保持某些数据保持冻结状态,而且通常将名称、SKU 和价格复制到订购的商品模型更实用。您很可能不需要冻结库存水平、详细说明或图片等内容。

不过,既然你问的是一般情况,你可能想看看:

http://www.djangopackages.com/grids/g/versioning/

【讨论】:

  • 这是 Google 建议的,但这不只适用于版本控制模型吗?
  • 您所说的“版本控制模型”是什么意思?对我来说,“版本控制模型”就是 South 所做的——在不同版本的模式之间提供数据库迁移。
  • 如果您在数据库已填充数据后更改模型,则需要对模型进行版本控制。就我而言,我根本不想改变我的模型。我想做的就是改变对象。就像在数据库中编辑单行一样。但我不想丢失被覆盖的数据。问题是我想用外键防止链接到错误版本的对象。
  • 所有这些都用于数据版本控制,而不是模式版本控制。因此,您可以获得同一对象的不同版本的多行。
【解决方案2】:

基本上如果你想在每次调用save时创建一个新对象,只需清除它的pk即可。

class PersistentModel(models.Model) 
   def save(self):
        if self.pk is not None:
            self.pk = None
        return super(PersistentModel, self).save()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-02
    • 2019-08-09
    • 2012-02-22
    • 1970-01-01
    • 2013-11-12
    • 2015-08-27
    • 2011-06-19
    • 1970-01-01
    相关资源
    最近更新 更多