【问题标题】:Use Django Model class inheritance to create an audit log for a table使用 Django Model 类继承为表创建审计日志
【发布时间】:2011-05-21 07:52:32
【问题描述】:

我想使用http://docs.djangoproject.com/en/dev/topics/db/models/#model-inheritance 对现有模型进行子类化,以创建对原始表中任何记录所做的每次更改的完整历史记录。

Foo类: 数据 = 模型.TextField() created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) 定义保存(): 极好的(...) 审计 = FooAuditLog.createFromFoo(self) 类 FooAuditLog(Foo): history_for = models.ForeignKey(Foo) def createFromFoo(foo): ... #从原始记录创建审计日志条目。

所以每次我创建或更新“Foo”类型的记录时,我都想拍摄 Foo 记录的快照并将另一个条目添加到 FooAuditLog 中。我的目标是为每条 Foo 记录提供完整的修订历史记录,以便我可以跟踪随着时间的推移对每条记录所做的每一次更改。

这种方法的缺陷是什么?如果与 Foo 之间存在 ForeignKey 关系,我是否需要担心 Foo 和 FooAuditLog 之间的级联删除/更新?

【问题讨论】:

  • 你最后做了什么?我现在正在研究类似的解决方案。谢谢!

标签: django django-models


【解决方案1】:

为什么不使用诸如Audit Trail 应用程序之类的东西呢?我真的看不出继承如何真正适合日志记录所需的抽象。 Audit Trail 在类中使用一个简单的声明来打包所有的活动。

【讨论】:

    【解决方案2】:

    两种可能的预编码解决方案是 https://github.com/etianen/django-reversionhttp://code.djangoproject.com/wiki/AuditTrail 。更多选项在https://www.djangopackages.com/grids/g/model-audit/

    正如您所注意到的,外键引用很棘手,尤其是对于多对多模型。您必须确定旧模型是否是对新表的约束,否则会破坏那些使“撤消”相当复杂的关系。

    【讨论】:

      猜你喜欢
      • 2015-11-26
      • 1970-01-01
      • 1970-01-01
      • 2017-04-06
      • 1970-01-01
      • 2016-09-15
      • 1970-01-01
      • 2011-01-23
      • 2012-04-06
      相关资源
      最近更新 更多