Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 删除外键模型对象后,模型不创建验证(django反转)_Python_Django_Postgresql_Audit_Django Reversion - Fatal编程技术网

Python 删除外键模型对象后,模型不创建验证(django反转)

Python 删除外键模型对象后,模型不创建验证(django反转),python,django,postgresql,audit,django-reversion,Python,Django,Postgresql,Audit,Django Reversion,我有两门课: 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.regist

我有两门课:

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)
在大多数情况下,它工作正常。e、 g.当我更改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复归
?还是有其他方法可以实现这一点

  • 注意:SysApp中还有一个字段是M2M,我也希望获得相同的结果
找到了解决方案:

需要三个步骤: 1) 将“reversion.middleware.RevisionMiddleware”添加到settings.py中的中间件类中 2) 创建一个pre_delete signal函数来查找SysApp对象 3) SysApp obj的显式调用save()

一些解释: 1) 通过添加中间件,对模型的任何更改都将添加到修订历史记录中 2) 使用pre_delete信号查找SysApp对象(父对象) 3) 调用save()强制django恢复以创建修订

一些参考资料: django复归文件: 使用信号的快速示例: