Я думаю о том, как наилучшим образом реализовать модель, которая не может быть изменена (то есть: каждый раз, когда изменяются данные модели, создается новый экземпляр объекта и добавляется ссылка на предыдущий экземпляр, чтобы отразить тот факт, что старый объект объявлен устаревшим новым).
На данный момент что-то быстрое и грязное, что я придумал, выглядит примерно так:
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()
Что-то подсказывает мне, что даже если это работает, это, вероятно, очень паршивый способ сделать это. Есть ли более «элегантное» решение для такой вещи?
Спасибо!