2011-05-01 48 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

相关问题