我知道那里有回归,我知道 django 中有 fullhistory 分支。但我非常想坚持 django 对象的原始历史。我只需要确保我还保存 OLD 和 NEW 值。
默认情况下,django 只保存发生的事情(例如更新),但不存储值。任何人都可以向我指出一些东西(片段或应用程序),它略微增强了 django 的默认历史记录,并且还存储了编辑属性的值,而不仅仅是它被编辑的事实。
现在我的历史说
9-01-2012 12:55:02 更改:时间
我想让它说
9-01-2012 12:55:02 更改:时间从 6 点到 8 点
更新: ==> 对于任何对我的解决方案感兴趣的人(基于下面的答案)..
将 HistoryModel(object) 类添加到我的 models.py
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])))
覆盖我的管理员中的 log_change 方法并收集 object.changed_fields 字典并将其存储为消息