在我的应用程序中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?
禁用级联删除的子实例信号答案 0 :(得分:1)
简答:
你不能。
答案很长:
您需要覆盖.delete
和模型经理Model
的{{1}}方法
通过删除前/后删除信号传递删除被调用的实例,我完成了一些类似的任务。
答案 1 :(得分:0)
不像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,并采取相应措施。