Django3モデル(models)のForeignKeyフィールドで on_delete の引数指定が必須
更新日:2021年2月1日環境:Python3.8.2 Django3.1.5
使用例 models.py
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制約を設定しておく必要がある。
以上。