在进行一些更改后,如何恢复Django模型实例?
假设我有一个Django模型,如下所示:在进行一些更改后,如何恢复Django模型实例?,django,Django,假设我有一个Django模型,如下所示: class Person(models.Model): first_name = models.CharField(max_length=50) last_name = models.CharField(max_length=50) p = Person.objects.get(pk=p.pk) 在某个地方我有一个实例p,我对它做了一些修改 p.first_name = 'new first name' 由于某些原因,我希望恢复对该
class Person(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
p = Person.objects.get(pk=p.pk)
在某个地方我有一个实例p,我对它做了一些修改
p.first_name = 'new first name'
由于某些原因,我希望恢复对该实例所做的所有更改。我可以考虑恢复的一种方法如下:
class Person(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
p = Person.objects.get(pk=p.pk)
上面的代码取决于模型类名。有没有更简单的独立于模型的方法来实现这一点?给定一个实例p
p = p.__class__._default_manager.get(pk=p.pk)
嗯,thanx,我仍然想知道是否有一个定义良好的方法来解决这个问题。这不是Django中的通用用例吗?@Shailesh:
p
与从数据库检索到的任何其他Python对象一样,只是一个普通的Python对象。为了能够简单地“还原”您对对象所做的更改,旧值需要存储在该对象中(或者让该对象提供一个方法,该方法由spulec在幕后提供给您)。据我记忆所及,我从来没有这样做过。你想要它做什么?也许有更好的方法?@Deniz我基本上是在编写一些单元测试(使用py.test)。在测试中,我使用了p的属性值,然后对p进行了一些测试,然后将p恢复到原来的值。可能这不是一个需要Django特别支持的足够常见的场景。@Shailesh Kumar:如果这是用于单元测试,您就不能调用save()
,每次都依赖安装方法从数据库获取数据。因此,在测试之间,您可以假设旧值将出现在您的对象上。