如何使用django-simple-history

时间:2017-01-18 23:11:09

标签: django django-simple-history

我们为我们的模型设置了django-simple-history。最近,一大堆模型被神秘地删除了。事实发生后几天就注意到了这一点,因此避免完整的数据库备份恢复会很好,因为这样可以消除事后发生的手动更改。

我找不到任何方法可以轻松恢复模型实例,特别是已删除的模型实例。我可以查询模型的历史版本并查找已删除的所有内容。有了这个,我还可以观察到他们所有人都有删除作为他们的最后一次改变。我可以在history-1上使用instance属性来获取删除前的状态,但是如果我尝试保存它,那么因为模型实例被删除而不再存在它。

基本上,如果我有django-simple-history的历史记录,那么恢复已删除模型实例的最简洁方法是什么?如果可能的话,我想保留历史记录,所以在完全重新创建对象之前,我正在寻找任何解决方案。

3 个答案:

答案 0 :(得分:0)

您的意思是您的模型,而不仅仅是实例已被完全删除?如果是这种情况,则可能意味着某些迁移将其删除。

您可以尝试从历史记录中恢复迁移然后还原。

答案 1 :(得分:0)

据我所知,问题是关于恢复已删除的模型 instance ,而不是类本身。因此,卡尔的回答在这里无济于事。 要还原已删除的实例,不能使用简单的历史记录。根据{{​​3}},简单的历史记录只能恢复仍然存在的模型实例。 由于您具有数据库的完整备份,因此可以将该数据库导入django环境,从该备份数据库中加载旧模型实例,然后将其保存到生产数据库中(使用“ using”选择django shell中的数据库)。请参阅documentation帖子。 避免此类情况的最佳方法是使用应用程序“还原”。使用此django-app,您实际上可以还原已删除的实例。参见this

答案 2 :(得分:0)

模型的先前版本存储在_HISTORICAL 表中。您可以执行简单的sql插入/选择查询,以将数据从该表复制回原始表。类似于下面的方法可以工作,但是请检查数据库的正确sql语法。

insert into app_mymodel (col_a, col_b) 
select col_a, col_b from app_HISTORICALmymodel 
where id in (1,2,3...)