使用信号预删除,如何在某些情况下将其关闭?

时间:2017-11-17 12:55:35

标签: python django signals

使用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_deletepallet_content.delete(auto_delete_line_item=True)

我希望激活pre_deletepallet.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'

0 个答案:

没有答案