我正在考虑如何最好地实现一个无法修改的模型(即:每次修改模型数据时,都会创建一个对象的新实例,并在前一个实例中添加一个引用以反映旧对象的事实已被新的弃用)。
目前,我想到的一些又快又脏的东西看起来像这样:
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()
有些东西告诉我,即使这确实有效,它也可能是一种非常糟糕的方法。有没有更“优雅”的解决方案来做这样的事情?
谢谢!