Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.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中,删除前如何启动post_delete?_Python_Django_Django 1.6 - Fatal编程技术网

Python 在Django中,删除前如何启动post_delete?

Python 在Django中,删除前如何启动post_delete?,python,django,django-1.6,Python,Django,Django 1.6,我看到在从数据库中实际删除实例之前,post_delete会触发模型,这与 请注意,对象将不再位于数据库中,因此在处理此实例时要非常小心 如果我查看数据库,记录将保留,如果我使用ORM重新查询,则返回记录,并等效于实例: >>> instance.__class__.objects.get(pk=instance.pk) == instance True 我没有太多相关代码要显示,我的信号如下所示: from django.db.models.signals import p

我看到在从数据库中实际删除实例之前,
post_delete
会触发模型,这与

请注意,对象将不再位于数据库中,因此在处理此实例时要非常小心

如果我查看数据库,记录将保留,如果我使用ORM重新查询,则返回记录,并等效于实例:

>>> instance.__class__.objects.get(pk=instance.pk) == instance
True
我没有太多相关代码要显示,我的信号如下所示:

from django.db.models.signals import post_delete, post_save

@receiver(post_delete, sender=UserInvite)
def invite_delete_action(sender, instance, **kwargs):
    raise Exception(instance.__class__.objects.get(pk=instance.pk) == instance)
  • 我直接删除这个实例,它不是被删除的其他东西的关系
  • 我的模特看起来很正常
  • 我的视图是一个通用视图
  • 我在任何地方都没有发现任何事务性装饰器——这是我第一次想到它可能是如何发生的
有没有想过我会从哪里开始调试这到底是怎么发生的?如果有人意识到这是一个已知的bug,我找不到任何描述这种行为的票证——而且我确信这在我的应用程序中的其他看起来未受影响的地方也能像预期的那样工作


如果我允许执行继续,实例最终会被删除。。。因此,它不是因为无法删除而出现的(非常确定在这种情况下,post_delete不应该触发)。

我认为我看到的是Django的默认事务行为,在请求完成之前不会提交更改

我没有真正的解决方案——我看不到一种方法可以在事务完成后询问实例或记录的状态(甚至可以查看事务),也看不到任何简单的方法可以在不显著改变应用程序运行方式的情况下防止这种行为

我现在选择忽略这个问题,而不担心用例中的影响,事实上,这些影响并没有那么严重——但是,我欢迎任何关于如何正确处理这个问题的建议


在我的post_delete中,我为活动日志触发了一个更通用的信号,在侦听器中,我需要能够检查实例是否被删除——否则它绑定了一个错误的泛型关联,引用了一个不存在的pk,如果我看到该关联被删除,我打算将其置为空——但如前所述,在这一点上我说不出来,除非每当我在post_delete中触发信号时,我要传递一个额外的参数。

您使用的是哪个数据库后端?我无法在Django 1.7中复制。事务管理的重大更改是在1.6中进行的,因此我没有任何解释。您可以发布您的数据库设置吗?