【发布时间】:2013-02-01 08:59:26
【问题描述】:
我知道那里有回归,我知道 django 中有 fullhistory 分支。但我非常想坚持 django 对象的原始历史。我只需要确保我还保存 OLD 和 NEW 值。
默认情况下,django 只保存发生的事情(例如更新),但不存储值。任何人都可以向我指出一些东西(sn-p 或应用程序),它略微增强了 django 的默认历史记录,并且还存储了编辑属性的值,而不仅仅是它被编辑的事实。
现在我的历史说
9-01-2012 12:55:02 更改:时间
我想说
9-01-2012 12:55:02 更改:时间从 6 点到 8 点
更新: ==> 对于任何对我的解决方案感兴趣的人(基于下面的答案)..
-
在我的 models.py 中添加了 HistoryModel(object) 类
class HistoryModel(object): changed_fields = {} 在我的任何模型中继承
-
添加了一个 pre_save 接收器来保存旧值:
@receiver(pre_save, sender=Customer) def save_old_values(sender,**kwargs): #dont delete using in eval db_obj = sender.objects.get(pk=kwargs['instance'].pk) for field in kwargs['instance']._meta.fields: if not eval("db_obj." + str(field.get_attname_column()[0])) == eval("kwargs['instance']." + str(field.get_attname_column()[0])): kwargs['instance'].changed_fields[field.get_attname_column()[0]] = "from "+str(eval("db_obj." + str(field.get_attname_column()[0]))) + " to " + str(eval("kwargs['instance']." + str(field.get_attname_column()[0]))) 在我的 admin 中重写 log_change 方法并收集 object.changed_fields 字典并将其存储为消息
【问题讨论】:
标签: django