我有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
执行此操作?或者还有另一种方法来实现这一目标吗?
答案 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/