Версионная модель - PullRequest
       15

Версионная модель

0 голосов
/ 12 декабря 2010

Я думаю о том, как наилучшим образом реализовать модель, которая не может быть изменена (то есть: каждый раз, когда изменяются данные модели, создается новый экземпляр объекта и добавляется ссылка на предыдущий экземпляр, чтобы отразить тот факт, что старый объект объявлен устаревшим новым).

На данный момент что-то быстрое и грязное, что я придумал, выглядит примерно так:

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 Ответ

1 голос
/ 12 декабря 2010

Возможно, вам стоит взглянуть на django-reversion .

...