最初にdelete()メソッドをオーバーライドしようとしましたが、QuerySetの一括削除メソッドでは機能しません。それはpre_delete信号に関連するはずですが、私はそれを理解することはできません。私のコードは次の通りです:djangoでは、特定のタイプのインスタンスを削除する際に、関連オブジェクトをすべて削除する方法はありますか?
しかし、このメソッドは無限に呼ばれ、プログラムはデッドループになります。 誰か助けてくれますか?
最初にdelete()メソッドをオーバーライドしようとしましたが、QuerySetの一括削除メソッドでは機能しません。それはpre_delete信号に関連するはずですが、私はそれを理解することはできません。私のコードは次の通りです:djangoでは、特定のタイプのインスタンスを削除する際に、関連オブジェクトをすべて削除する方法はありますか?
しかし、このメソッドは無限に呼ばれ、プログラムはデッドループになります。 誰か助けてくれますか?
あなたのケースでは、pre_deleteの代わりにpost_delete信号を使用すると、無限ループの問題を修正する必要があります。 ForeignKeyのon_deleteのデフォルト値であるcascadeのために、この方法でpre_deleteロジックを使用すると、instance.contextオブジェクトがトリガされてdelete on instanceを呼び出すと、instance.contextなどが呼び出されます。
このアプローチを使用する:
def _post_delete_problem(sender, instance, **kwargs):
instance.context.delete()
instance.stat.delete()
post_delete.connect(_post_delete_problem, sender=Foo)
は、あなたが望むクリーンアップを行うことができます。