数据库变更历史

时间:2013-05-15 09:21:07

标签: django django-models

我正在寻找一个django软件包,它可以让我保存模型的历史记录,但仅限于更新。我找到了django-reversion,但经过快速浏览后似乎没有这样的能力。数据库触发器也不是一个选项,因为我的数据库结构相当复杂,编写它们会很困难。

2 个答案:

答案 0 :(得分:1)

我在某些时候遇到了同样的问题。

我当时的解决方案是定义两个模型:

  • 内容:对应于网站内容的抽象。此模型保留了网站的当前内容。
  • 操作:对应于网站上内容更改的抽象。

内容有两个指针(OneToOneField)来执行操作:首次编辑,这是创建该特定内容的操作,上次编辑,对内容进行最后修改的操作。

操作有一个指针(OneToOneField)到一个actor,执行该操作的用户,以及指向另一个操作的指针(ForeignField),这是对特定内容的上一个操作。它还有一个TextField,可以保存内容更改。例如,这可以是数据库的类似diff的文本,或者只是一个pickle字典。

在某种意义上,这相当于像git这样的版本控制,其中“action”是对特定内容(而不是整个项目)的提交,而内容是源。提交通过“先前提交”链接,并保存内容更改和用户。

答案 1 :(得分:0)

您可以使用south。它会检测模型的更改并创建允许您向前和向后同步数据库的迁移文件。