Skip to main content
 首页 » 编程设计

python之使用 django-reversion 显示模型实例的更改日志历史记录

2025年05月04日35shanyou

使用: django 1.10 还原 2.0.8.

我的问题是如何显示对给定模型实例所做的更改的漂亮列表。我的意思是用户可以快速查看所有修订中的所有更改(字段的新值)的列表。他不需要查看所有字段,只需查看已更改字段的新值。

于是我发现一个很好的存储变化的工具是django-reversion。但是,我找不到解决我的问题的方法,正如我提到的那样,它是为给定模型实例显示一个很好的更改日志历史记录。

我找到了可以比较两个修订版 django-reversion-compare 的解决方案,但这不是我要找的。也许有更好的工具?

任务太快向用户展示了谁在什么时候改变了什么。该模型很简单,不会存储大量数据。但是它确实存储外键。

请您参考如下方法:

我也想做同样的事情,在阅读了一些 SO 帖子、文档等之后,我似乎不得不从以下 3 种方法之一中粗略地选择解决方案:

1) 在保存新模型实例之前获取现有模型实例。比较每个字段。将更改的字段放入 reversion.set_comment('(此处所有更改)')。继续保存模型实例。

2) 在模型的 __init__() 中单独保存旧字段的副本,然后将新字段与它们进行比较(在模型的 save() 中)以跟踪更改的内容。将更改的字段放入 reversion.set_comment('(此处所有更改)')。继续保存模型实例。 (这种方法将节省数据库查找)

3) 生成一个diff使用 django-reversion 的 low-level API 并以某种方式与管理员集成

我最终使用了 django-reversion-compare 这对我来说非常有用,显示了 wiki 风格的编辑(无论如何都可能使用上面的 (3))

django-reversion 的开发者也是 confirmed (3) 作为一个更好的选择,它也避免了竞争条件。

如果您想探索不同的选择,this是一篇很棒的 SO 帖子,其中有很多好主意及其优缺点。

(我也在 Django 1.10 上)