2011-05-01 42 views
2

假設我有一個Django模型如下:如何在做出一些更改後還原Django模型實例?

class Person(models.Model): 
    first_name = models.CharField(max_length=50) 
    last_name = models.CharField(max_length=50) 

帶我有一個實例P,和我做了一些更改。

p.first_name = 'new first name' 

由於某種原因,我希望恢復對此實例所做的所有更改。我可以想到恢復的一種方式如下:

p = Person.objects.get(pk=p.pk) 

上述代碼取決於Model類的名稱。有沒有更簡單的模型獨立的方式來做到這一點?

回答

3

給定一個實例P,

p = p.__class__._default_manager.get(pk=p.pk) 
+0

嗯,感謝名單,我仍然不知道是否有此明確定義的方法。在Django中不是一個普通用例嗎? – 2011-05-01 17:45:14

+0

@Shailesh:'p'只是一個普通的Python對象,就像任何其他的數據庫一樣。爲了簡單地「恢復」對對象所做的更改,舊值需要存儲在該對象內(或讓對象提供代碼在後臺爲您提供的方法)。據我所知,我從來沒有這樣做過。你想要什麼?也許有更好的方法? – 2011-05-01 20:56:30

+0

@Deniz我基本上是在編寫一些單元測試(使用py.test)。在測試中,我玩的是p的屬性值,然後對p進行一些測試,然後將p恢復到原來的值。可能這不是一個常見的情況,需要Django的特別支持。 – 2011-05-02 01:52:26

相關問題