以下のサンプルモデルがあります。
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)
WinnerとLoserの2つのメモがあるとしましょう。
Loserには、勝者ノートを指すフィールドsimilar_noteがあります。
2つのうちのいずれかを削除すると、両方とも削除されます。これを防ぐにはどうすればよいですか。 私はdjangoの管理画面からも同じことをしてみました、それはそこからも起こります。
シモンズ:私はdjango 1.2を使っています。アップグレードするためのアドバイスをしないでください、制約が多すぎます。
回答:
回答№1は2述べたように ここに:
Djangoがオブジェクトを削除すると、デフォルトでは削除されますの動作をエミュレートします。 SQL制約ON DELETE CASCADE - つまり、任意のオブジェクト 削除されるオブジェクトを指す外部キーがあるものは それと共に削除されます。
このカスケード動作は、on_delete引数を使用してカスタマイズできます。 ForeignKey
チェックしてください on_delete モデルフィールドのパラメータ:
user = models.ForeignKey(User, blank=True, null=True, on_delete=models.SET_NULL)