【问题标题】:Versioned model版本化模型
【发布时间】:2010-12-11 23:37:50
【问题描述】:

我正在考虑如何最好地实现一个无法修改的模型(即:每次修改模型数据时,都会创建一个新的对象实例,并在前一个实例中添加一个引用以反映以下事实:旧对象已被新对象弃用)。

目前我想到的一些又快又脏的东西看起来像这样:

class VersionedModel(models.Model):
    # points to initial reference
    initial = models.ForeignKey(VersionedModel, verbose_name=_(u"initial"), related_name="versions", editable=False)
    # ought to be a one-one reference
    deprecated_by = models.ForeignKey(VersionedModel, ...)
    version = models.IntegerField(...)

    class Meta:
        abstract = True

    def save(self):
        prev_pk = self.pk
        self.pk = None
        prev = self.objects.get(pk=prev_pk)
        prev.deprecated_by = self
        super(self.__class__), self).save()

有些东西告诉我,即使这确实有效,它也可能是一种非常糟糕的方法。有没有更“优雅”的解决方案来做这样的事情?

谢谢!

【问题讨论】:

  • 如果你正在改变一个对象 pk,如果你有指向它的关系,你会遇到问题......

标签: django django-models django-signals


【解决方案1】:

你或许应该看看django-reversion

【讨论】:

  • 删除或添加新字段时非常困难 =(
猜你喜欢
  • 1970-01-01
  • 2020-04-16
  • 2011-12-03
  • 2012-10-10
  • 2021-05-21
  • 2014-09-01
  • 2015-05-08
  • 2011-09-14
  • 1970-01-01
相关资源
最近更新 更多