我有 2 个类:
class ContactInternal(models.Model):
name = models.CharField(max_length=80)
SysAppApp = apps.get_app_config('SysApp')
SysAppModel = SysAppApp.models
reversion.register(ContactInternal, follow=["fk_contactinternal_sysapp"])
reversion.register(SysAppModel)
# SysApp from another app called 'SysApp'
class SysApp(models.Model):
name = models.CharField(max_length=80)
internalcontact = models.ForeignKey(ContactInternal, related_name='fk_contactinternal_sysapp', null=True, verbose_name="Internal Contact",blank=True,on_delete=models.SET_NULL)
在大多数情况下,它工作正常,例如,当我对ContactInternal进行更改时,会对SysApp进行新版本。对它的工作方式非常满意。
但是,如果我删除从SysApp.internalcontact
链接的记录,则不会为SysApp创建任何版本。
实际上,我想要实现的只是获取SysApp上次修改日期的时间戳以及哪个用户(不需要回滚)。我想知道
'When Peter delete a John from ContactInternal on 26th Feb, it will show Peter updated SysApp on 26th Feb'
我怎样才能用django-reversion
做到这一点?还是有其他方法可以实现这一点?
- 注意:SysApp 中还有另一个字段是 M2M,我也想获得相同的结果。
找到了一个解决方案:
需要 3 个步骤:1) 在 settings.py 中添加"reversion.middleware.RevisionMiddleware"到MIDDLEWARE_CLASSES2) 创建一个pre_delete信号函数来查找 SysApp 对象3) 显式调用 save() for the SysApp obj
一些解释:1) 通过添加中间件,对模型的任何更改都将添加到修订历史记录中2) 使用pre_delete信号查找 SysApp 对象(父对象)3) 调用 save() 来强制 django-reversion 创建一个修订版
一些参考资料:Django-reversion 文档:http://django-reversion.readthedocs.org/en/latest/api.html使用信号的快速示例:http://www.koopman.me/2015/01/django-signals-example/