【发布时间】:2015-05-06 10:56:40
【问题描述】:
我看到post_delete在实例实际从数据库中删除之前在模型上触发,这与https://docs.djangoproject.com/en/1.6/ref/signals/#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)
- 我是直接删除这个实例,它不是正在删除的其他东西的关系
- 我的模型看起来很正常
- 我的视图是通用的 DeleteView
- 我在任何地方都没有找到任何事务性装饰器 - 这是我第一个想到的可能是它的发生方式
关于我从哪里开始调试这到底是怎么发生的有什么想法吗?有没有人知道这是一个已知的错误,我找不到任何描述此类行为的票证 - 我也确信这在我的应用程序中看似不受影响的其他各个地方都能正常工作。
如果我允许继续执行,则实例最终会被删除...所以它不存在,因为它无法删除它(很确定 post_delete 无论如何都不应该在这种情况下触发)。
【问题讨论】:
-
您使用的是哪个数据库后端?我无法在 Django 1.7 中重现。事务管理的重大变化是在 1.6 中进行的,所以我没有任何解释。
-
您可以发布您的数据库设置吗?
标签: python django django-1.6