0

変更できないモデルを実装する最善の方法を考えています (つまり、モデル データが変更されるたびに、オブジェクトの新しいインスタンスが作成され、以前のインスタンスに参照が追加されて、古いオブジェクトが変更されたという事実が反映されます)。新しいものによって廃止されました)。

現時点で、私が考えた簡単で汚いものは次のようになります。

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

これがうまくいくとしても、それはおそらく非常にお粗末な方法だと何かが私に教えてくれます。そのようなことを行うためのより「エレガントな」ソリューションはありますか?

ありがとう!

4

1 に答える 1

1

おそらくdjango-reversionを見てください。

于 2010-12-11T23:57:12.883 に答える