在我的申请中 post_delete
信号被记录在特定模型中以及何时被移除。
class A(models.Model):
...
class B(models.Model):
a = models.ForeignKey('A')
class C(models.Model):
b = models.ForeignKey('B')
def log_delete(sender, instance, **kwargs):
logging
post_delete.connect(log_delete, sender = A)
post_delete.connect(log_delete, sender = C)
当您删除 A 级联删除的实例时,会删除 B 和 C 实例。如何禁用 Django 级联删除子实例的信号?
最佳答案
不是 user2059857 建议的优雅解决方案,但实现起来更简单:
向模型 A 添加一个字段:
being_deleted = models.BooleanField(default=False)`
当模型 pre_delete 信号被触发时,将此设置为 True:
@receiver(models.signals.pre_delete, sender=A)
def a_pre_delete(sender, instance, **kwargs):
instance.being_deleted = True
instance.save()
检查是否
being_deleted
你的 A 实例在每个 pre_delete
中都是 True子模型并采取相应的行动。
关于Django 级联删除和 post_delete 信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27566614/