2010-12-11 53 views
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() 

東西告訴我,即使這樣做的作品很可能是一個非常糟糕的方式做到這一點。是否有更「優雅」的解決方案來做這樣的事情?

謝謝!

+1

如果你正在改變一個對象PK,你將遇到問題,如果你有關係指向它...... – 2010-12-12 11:51:30

回答

1

你也許應該看看django-reversion

+0

非常難當刪除或添加一個新的字段=( – Vladislav 2013-02-25 11:10:29