DjangoMigration - 外部キーリレーショナル
Django migrationで、RDBを構築するにあたって。
前提
こちらの、前提条件とマイグレーションの初歩を参考
外部キー参照設定
Django migration を利用して、外部キー参照設定を行うには。
ForeignKey を設定する
紐づけたいモデルを定義する事で、外部キーカラムを付与したテーブルの生成が可能になる。
example
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
# ↓↓↓↓↓↓↓↓
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
マイグレート
マイグレートファイルを生成して、テーブル生成。
python manage.py makemigrations web
python manage.py migrate
パラメーター
on_delete
- 紐付いているレコードも削除するか否かの設定を行う
- on_delete=models.CASCADE
- 紐付いた情報の削除
- on_delete=models.PROTECT
- 紐付いている情報が存在する場合には削除しない
null許容されてない場合
null=Falseとなっており、空欄を許容していない場合には、デフォルト値を設定して置くと良い。
example
question = models.ForeignKey(Question, on_delete=models.CASCADE, default=1)
もし、設定されていなかった場合には、makemigration時にデフォルト値を入力するか尋ねられ、その場で入力する事も可能ではある。
参照関係
外部キー設定されているオブジェクトは、互いに参照し合うことが出来る。
一対多(OneToMany)の関係、多対多(ManyToMany)、一対一(OneToOne)の関係性を持っている。