1. TOP
  2. ブログ
  3. Django3モデル(models)のForeignKeyフィールドで on_delete の引数指定が必須

Django3モデル(models)のForeignKeyフィールドで on_delete の引数指定が必須

更新日:2021年2月1日
Djangoのmodelsで、他のマスタテーブルのidを外部制約キーForeignKeyとするフィールドを 追加する場合、2.0のバージョンから on_delete の引数 指定が必須です。

環境:Python3.8.2 Django3.1.5

使用例 models.py

from django.db import models

class Manufacturer(models.Model):
# ...
pass

class Car(models.Model):
manufacturer = models.ForeignKey(Manufacturer, on_delete=models.CASCADE)
# ...

■on_deleteオプションの選択肢

・models.CASCADE

マスターデータ(Manufacturer)のあるデータが削除された場合、それに関係するmanufacturerを使用しているCarのレコードも同時に削除する。

・models.PROTECT

マスターデータ(Manufacturer)に関連付けされているCarのデータがある場合、そのマスタデータは削除できない。
先に関係するCarのデータ(manufacturer)の削除か変更が必要。

・models.SET_NULL

マスターデータ(Manufacturer)のあるデータが削除された場合、それに関係するCarのmanufacturerは、Nullとなる。
Carのmanufacturerに、null=Trueの引数設定も必要。

・models.SET_DEFAULT

マスターデータ(Manufacturer)のあるデータが削除された場合、それに関係するCarのmanufacturerは、デフォルト値となる。
Carのmanufacturerに、default=の引数設定も必要。

・models.SET(~)

マスターデータ(Manufacturer)のあるデータが削除された場合、それに関係するCarのmanufacturerフィールドの値をどうするか処理(~)を決めておく。

・models.DO_NOTHING

マスターデータ(Manufacturer)のあるデータが削除された場合、それに関係するCarのデータは何もしない。
DBによるエラーが発生する場合は、手動でDBのON DELETE制約を設定しておく必要がある。

以上。


B!

前の記事:Django Template(テンプレート) でコメントアウトにしてHTML非表示にする

次の記事:Django SQL データベース 操作 まとめ 入門(1)全件、1件、件数