Django ForeignKeyで1対多のモデルを構築

2019年12月2日

ForeignKeyを利用して、「1対多」のリレーションを持つモデルを構築します。

 

異なるモデル(テーブル)を、ForeignKeyを利用して「1対多」の関係において結びつけます。また、管理サイト(admin)で外部キー制約の確認をしてみます。 

 

本記事では下記イラストのような関係を持つ2つのモデルを用意します。Clubが親でMemberが子の関係となります。ForeignKeyは子側に設定します。

 

 

 

 

models.py

14行目

親となるモデル(Club)を指定しています。「on_delete=〜」には親のデータを削除する場合の挙動を設定します。models.CASCADEを設定すると、親側のデータを削除すると、結び付いた子側のデータも連動して削除されます(後述)。

 

 

管理サイトでの挙動確認


 

Memberの画面です。

 

 

memberを追加する画面で、Clubフィールドの内容が選択(および追加)できるようになります。

 

 

 

「on_delete=models.CASCADE」の場合、Clubの任意のデータを削除すると、結びついた子であるMember側のオブジェクトも連動して削除されます。下記画像は、あらかじめ野球クラブに花子と次郎メンバーが属している状態において、野球クラブを削除しようとする画面です。「はい」を押下すると、両メンバー自体のデータも連動して削除されます。

 

 

 

他の設定として、例えば「on_delete=〜」にmodels.PROTECTを指定すると、結びついた子データがある場合には、親データは削除不可となります(他の設定は 引数 を参照)。もし野球クラブを削除したい場合は、あらかじめ次郎と花子をメンバーから削除しておく必要があります。

 

 

 

 

参照ページ


 

django ドキュメント

モデルフィールドリファレンス

リレーションシップフィールド

 

 

 

LINEで送る
Pocket

Copyright © 2019 思考の葉 All Rights Reserved.  プライバシーポリシー