Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在进行一些更改后,如何恢复Django模型实例?_Django - Fatal编程技术网

在进行一些更改后,如何恢复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' 由于某些原因,我希望恢复对该

假设我有一个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 = 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()
,每次都依赖安装方法从数据库获取数据。因此,在测试之间,您可以假设旧值将出现在您的对象上。