我想使用http://docs.djangoproject.com/en/dev/topics/db/models/#model-inheritance子类化现有模型,以便创建对原始表中任何记录所做的每次更改的完整历史记录。
class Foo: data = models.TextField() created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) def save(): super(...) audit = FooAuditLog.createFromFoo(self) class FooAuditLog(Foo): history_for = models.ForeignKey(Foo) def createFromFoo(foo): ... #Create the auditlog entry from the original record.
因此,每次创建或更新“Foo”类型的记录时,我都想拍摄Foo记录的快照,并在FooAuditLog中添加另一个条目。我的目标是为每个Foo记录提供完整的修订历史记录,以便我可以跟踪每个记录随时间的每个变化。
这种方法的缺陷是什么?如果与Foo之间存在ForeignKey关系,我是否必须担心Foo和FooAuditLog之间的级联删除/更新?
答案 0 :(得分:3)
为什么不使用诸如Audit Trail应用之类的内容?我无法真正看到继承如何真正适合日志记录所需的抽象。 Audit Trail在类中使用一个简单的声明来打包所有活动。
答案 1 :(得分:0)
两种可能的预编码解决方案是https://github.com/etianen/django-reversion和http://code.djangoproject.com/wiki/AuditTrail。更多选项位于https://www.djangopackages.com/grids/g/model-audit/
如您所知,外键引用很棘手,特别是对于多对多模型。您必须确定旧模型是否是新表的约束,否则会破坏那些使“撤消”变得复杂的关系。