我正在编写一个 Django 应用程序,它将以类似于管理界面的方式跟踪模型的更改。例如,我将能够显示对模型的更改列表,看起来像Changed Status from Open to Closed
.
我正在使用 pre_save 信号来执行此操作,比较数据库中现有项目和正在保存的“实例”之间的相关字段。要获得现有项目,我必须这样做sender._default_manager.get(pk=sender.pk)
看起来有点乱,但那部分有效。
问题是,更改此模型的视图调用save()
表单上的方法两次(第一次使用 commit=False) - 这意味着数据库中记录了 2 次更改,因为 pre_save 信号被发出两次。
有什么办法可以做到这一点吗?也许以完全不同的方式,虽然我记得读过 Django 管理应用程序使用信号来跟踪用户所做的更改。