删除外键模型对象后,模型不会创建一个版本(django-reversion)

时间:2016-02-28 02:06:40

标签: python django postgresql audit django-reversion

我有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我也希望得到相同的结果。

1 个答案:

答案 0 :(得分:0)

找到解决方案:

需要3个步骤: 1)在settings.py中将'reversion.middleware.RevisionMiddleware'添加到MIDDLEWARE_CLASSES 2)创建一个pre_delete信号函数来查找SysApp对象 3)为SysApp obj显式调用save()

一些解释: 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/