0

次のサンプルモデルがあります。

class Note(models.Model):
    text = models.TextField()
    author = models.OneToOneField(User)
    date_created = models.DateField(auto_now_add=True)
    similar_note =  models.ForeignKey("self", related_name='similar_note', null=True, blank=True)

勝者と敗者の 2 つのノートがあるとします。

Loser には、Winner Note を指すフィールド similar_note があります。

2 つのいずれかを削除すると、両方が削除されます。これを防ぐにはどうすればよいですか? 私はdjango管理インターフェースからも同じことを試みましたが、そこからも起こります。

PS: 私は django1.2 を使用しています。アップグレードを勧めないでください。制約が多すぎます。

4

1 に答える 1

2

ここで述べたように:

Django がオブジェクトを削除するとき、デフォルトでは、SQL 制約 ON DELETE CASCADE の動作をエミュレートします。つまり、削除するオブジェクトを指す外部キーを持つオブジェクトはすべて削除されます。

このカスケード動作は、ForeignKey への on_delete 引数を介してカスタマイズできます。

モデル フィールドのon_deleteパラメータを確認してください。

user = models.ForeignKey(User, blank=True, null=True, on_delete=models.SET_NULL)
于 2012-12-18T10:10:26.277 に答える