私は、コンテンツタイプGenericForeignKeyを使用して任意のモデルにコメントを付けることができるカスタムコメントシステムを作成しています。削除時にGenericForeignKeyがカスケードしないのはなぜですか?
コメントが添付されているモデルを削除すると、削除はカスケードしてコメントを削除する必要があります。
残念ながら、これは起こっていないと私は困惑しています。デフォルトの削除動作が変更される一般的な理由はありますか?
私は、コンテンツタイプGenericForeignKeyを使用して任意のモデルにコメントを付けることができるカスタムコメントシステムを作成しています。削除時にGenericForeignKeyがカスケードしないのはなぜですか?
コメントが添付されているモデルを削除すると、削除はカスケードしてコメントを削除する必要があります。
残念ながら、これは起こっていないと私は困惑しています。デフォルトの削除動作が変更される一般的な理由はありますか?
いいえ、ドキュメンテーションはそれを言っていません。それは、GenericRelation
をモデル、つまりGenericForeignKey
の裏面に定義すると、汎用FKの項目が削除されると、GenericRelationの項目も削除されるということです。
GenericForeignKeyは、外部キーとは異なり、この動作をカスタマイズするにはon_delete 引数を受け入れません。必要であれば、あなたは単にGenericRelationを使用しないことにより、 カスケード削除を回避することができ、および代替 挙動がpre_delete信号を介して提供することができます。
ありがとう、私はドキュメントの一部を誤解し、デフォルトでカスケードすると想定していました。 – Soviut
ありがとう、私の目はどこでしたか... – valex
私はdjangoのdocsはこれを別の方法で述べるべきだと思います。 "GenericForeignKeyは削除をカスケードしません。代わりに値をnullに設定します。関連するモデルでGenericRelationが使用されている場合のみカスケードします。"通常の外部キーではカスケード削除がデフォルトで行われるため、これが必要です。 –