使用Django:1.10
pre_delete
信号和接收器我想使用pre_delete
删除模型的其他相关记录。
即使我想删除主模型
,也不要在特定时间调用它我尝试覆盖主模型PalletContent
中的删除功能,如下所示:
def delete(self, *args, **kwargs):
self.auto_delete_line_item = False
if 'auto_delete_line_item' in kwargs:
self.auto_delete_line_item = kwargs['auto_delete_line_item']
del kwargs['auto_delete_line_item']
return super(PalletContent, self).delete(*args, **kwargs)
然后在pre_delete
@receiver(pre_delete, sender=PalletContent)
def auto_delete_line_item(sender, instance, **kwargs):
if instance.auto_delete_line_item:
EntryFormHelper.remove_entry_form_line_item_from_pallet_content(
pallet_content=instance)
ExitFormHelper.remove_exit_form_line_item_from_pallet_content_if_any(
pallet_content=instance)
然后在适当的电话中:
我希望这会激活pre_delete
:pallet_content.delete(auto_delete_line_item=True)
我希望不激活pre_delete
:pallet.pallet_contents.all().delete()
我得到的是:
File "/usr/../signals.py", line 31, in auto_delete_line_item
if instance.auto_delete_line_item:
AttributeError: 'PalletContent' object has no attribute 'auto_delete_line_item'