Django级联删除和post_delete信号 [英] Django cascade delete and post_delete signal
问题描述
在我的应用程序中, post_delete
信号记录在特定模型中以及何时将其删除.
In my application post_delete
signals being recorded in a specific model and when it was removed.
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进行级联删除时为子实例禁用信号?
When you delete an instance of A cascade delete occurs removing B and C instances. How can I disable signal for child instances on cascade delete by django?
推荐答案
这不是user2059857所建议的优雅解决方案,但更易于实现:
Not an elegant solution as what user2059857 suggested, but a LOT simpler to implement:
为模型A添加一个字段:
Add a field to model A:
being_deleted = models.BooleanField(default=False)`
在触发模型pre_delete信号时将其设置为True:
Set this to True when A model pre_delete signal is fired:
@receiver(models.signals.pre_delete, sender=A)
def a_pre_delete(sender, instance, **kwargs):
instance.being_deleted = True
instance.save()
检查您的A实例的 being_deleted
在子模型的每个 pre_delete
中是否为True,并采取相应的措施.
Check if being_deleted
of your A instance is True in every pre_delete
of child models and act accordingly.
这篇关于Django级联删除和post_delete信号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!