【问题标题】:Multiple undos in Django-ReversionDjango-Reversion 中的多个撤消
【发布时间】:2015-01-10 11:15:37
【问题描述】:

我想撤消在模型中所做的更改。我可以使用 django-reversion 将其撤消 1 级。但是如何多次撤消我的更改。

例如:-

我有模特

with reversion.create_revision():
    server_obj = Server(url = 1)
    server_obj.save()

现在,我更新了两次。用两次这个词,我的意思是我调用了这个函数两次或者说 n 次。

with reversion.create_revision():
    url = bundle.data['url']
    server_obj.url = url

如何在 n 次下撤消。

目前,我正在这样做。

your_model = Server.objects.get(id = id)
version_list = reversion.get_unique_for_object(your_model)
version = version_list[1]
version.revision.revert()

我该怎么做???

【问题讨论】:

  • 没有。我已经阅读并尝试过。不能解决我的目的。我能够检索以前保存的对象的列表。但是如何多次撤消呢? version_list 确实返回了所有以前保存的对象的列表。但是如何将它用于多个撤消?
  • 您必须在版本列表中查找要恢复的版本。
  • 你能提供一个示例代码sn-p吗?这将非常有帮助。谢谢!!!

标签: python django django-reversion


【解决方案1】:

version_list.order_by('-revision__date_created')[2].revert()

然而,这将在不留下自己的修订版的情况下恢复。

查询集中有一个名为 last() 的东西,它可以显示对象在上次更改之前 持有的版本。但是它不适用于您的用例,因为它不跟踪 revert()。

我认为对您来说唯一可行的方法是制作一个跟踪撤消的外部模型。这很混乱,容易出现边缘情况。我觉得必须有更好的方法来做到这一点。

【讨论】:

  • 谢谢@Beltiras。这将直接恢复到倒数第二次更新。我想要这样的东西。我发过一次。然后再次更新(1)。又是(2),又是(3),又是(4),又是(5)。现在我想逐步撤消。第一次撤消应该恢复到(4),另一个撤消应该恢复到(3),另一个撤消到(2),另一个撤消到(1),就是这样,之后就不能再撤消了。
  • 这很清楚。也很难做到。尝试修改原始代码中的一行:version_list = reversion.get_unique_for_object(your_model).filter(revision_id__lte=your_model.revision_id)
  • 它会做什么?请解释。谢谢
  • 过滤掉比当前集合更年轻的任何修订。您应该真正尝试提供的代码并在 REPL 中使用它。这是理解复杂系统的唯一方法:亲自动手。
  • 好吧,我试过了。什么是your_model.re‌​vision_id??我的模型没有revision_id
猜你喜欢
  • 2013-03-12
  • 2018-01-30
  • 2016-02-04
  • 1970-01-01
  • 2015-11-06
  • 2011-09-26
  • 2016-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多