2017-08-08 11 views
-1

から派生したオブジェクトを削除しますか?私がforeign_keyとDELETE_CASCADEを使って作業しているのであれば、罰金ですが、派生したモデルではありません。ジャンゴORMは、私は次の問題を持っている別のモデル

+0

どのオブジェクトがBのどのオブジェクトに接続されているかを判断しています –

+0

Bのデータベースオブジェクトにオブジェクトのポインタがあります – mbieren

+0

カスタムメソッドを削除します。それは本当に簡単な解決策となる –

答えて

0

基本的に、オブジェクトフォームモデルAを削除するために、モデルBに独自のdelete()メソッドを記述することは可能です。 しかし、ForeignKeyがない場合、どのオブジェクトAが特定のオブジェクトBの削除によってカスケードされるべきかをどのように決定し/知るべきですか?

+0

djangoを使用してオブジェクトを削除すると、ベースオブジェクトが削除されます。 SQLレベルではありません。 Django ORMはデータベースにDELETE CASCADEを設定しません。 – mbieren

+0

私は本当にそれを取得しません。あなたが言った - 私が間違っている場合私を修正する - モデルのオブジェクトがdjangoで削除された場合、データベースから削除されません?または、継承されたモデルでCASCADE削除を参照するだけですか? –

+0

私は、継承されたモデルがデータベースから削除されたことを意味します。 django(またはadmin)で削除すると、基本オブジェクトは削除されます。プレーンSQLを使用する場合、ベースオブジェクト(この場合はA)は削除されません。 – mbieren

0

dbshel​​lを使用してBオブジェクトを削除しても問題ありません。クラスBの基本オブジェクトも削除されます(この場合はA)。

DjangoはデータベースレベルでDELETE CASCADEを配置しません。 sqlを使用してモデルBオブジェクトを削除すると、オブジェクトはdbに残ります。

非常に悪い

0

Info to MaxM。私は、次のデータベース制約が欲しいです。 Djangoはこれを作成しません。

ALTER TABLE B 
    ADD CONSTRAINT B_A_fkey FOREIGN KEY (A_ptr_id) 
     REFERENCES A (id) 
     ON UPDATE CASCADE ON DELETE CASCADE; 

この動作のみをエミュレートします。あなたの提案は、私の名前を制御することができますA_ptr_id

関連する問題