版本化的模型

时间:2010-12-11 23:37:51

标签: django django-models django-signals

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

此刻,我想到的快速和肮脏的东西看起来像这样:

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()

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

谢谢!

1 个答案:

答案 0 :(得分:1)

你应该看看django-reversion