web-dev-qa-db-ja.com

on_delete = models.PROTECTおよびon_delete = models.CASCADEは、Djangoモデルに対して何をしますか?

私はDjangoに精通していますが、最近on_delete=models.CASCADEおよびon_delete=models.PROTECTモデルのオプション、

  • on_delete=models.CASCADEおよびon_delete=models.PROTECT両方が同じことをしています。
  • または両方が同じです(私はon_delete=models.CASCADE、親エントリを削除すると、関連するすべてのエントリが削除されます)

    私は同じもののドキュメントを検索しましたが、それ以上のものを見つけることができませんでした:

Django 2.

多対1の関係。 2つの位置引数が必要です。モデルが関連付けられているクラスとon_deleteオプションです。再帰的な関係(それ自体と多対1の関係を持つオブジェクト)を作成するには、models.ForeignKey( 'self'、on_delete = models.CASCADE)を使用します。

8
JustChill
  • CASCADEカスケード削除。 DjangoはSQL constraint ON DELETE CASCADEの動作をエミュレートし、ForeignKeyを含むオブジェクトも削除します。

  • PROTECTDjango.db.IntegrityErrorのサブクラスであるraisingProtectedErrorによる参照オブジェクトの削除を防止します。

モデルを変更したら、変更を確認するためにmakemigrationsmigrateを実行する必要があるため、物事は削除されます。

2
Exprator