2011-08-04 75 views

回答

7

如果該類有外鍵(或相關對象),它們在缺省情況下將被刪除,如在SQL中的DELETE CASCADE。

在類中定義foreign_key時,您可以使用on_delete參數更改行爲,但默認情況下是級聯。

檢查here

現在pre_delete信號的作品,但如果你使用它,因爲沒有一個對象按對象基礎刪除批量刪除它不會調用delete()方法。

1

在你的情況下,使用post_delete信號而不是pre_delete應該修復無限循環問題。由於ForeignKey的級聯缺省值爲on_delete,因此使用pre_delete邏輯將以此方式觸發instance.context對象,以調用實例的delete,然後調用instance.context,等等。

使用這種方法:

def _post_delete_problem(sender, instance, **kwargs): 
    instance.context.delete() 
    instance.stat.delete() 

post_delete.connect(_post_delete_problem, sender=Foo) 

可以做你想做的清理。

相關問題