djangoでは、違うmodel同士でもデータを紐付ける事が出来るのですが、参考書でも少し触れる程度しかないので、簡単にまとめておきます。
ちなみに、違うモデルのデータを紐付けることをリレーションと呼びます。
この記事は自身の備忘録として掲載します。
リレーションの方法
その紐付けの方法はとてもシンプルです。
例えば、以下のような2つのモデルがあるとして説明します。
class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ForeignKey(Author,on_delete=models.CASCADE)
ここで紐付け(関連付け)をしている部分は、
author = models.ForeignKey(Author, on_delete=models.CASCADE)の部分です。
ここでは、model名:authorの中にmodel名:Bookのデータを入れています。つまり、モデルAuthorの1つのデータを親、Bookの複数データを子として関連付けることができています。
この部分に
あるon_delete
引数は、関連付けられたオブジェクトが削除された場合の動作を定義します。models.CASCADE
を指定すると、関連付けられたオブジェクトが削除された場合、関連付けられた全てのオブジェクトも削除されます。
また、ManyToManyField
を使うと、多対多の関係を表現できます。以下は、Book
モデルとGenre
モデルの多対多の関係を表現する例です。
class Book(models.Model):
title = models.CharField(max_length=100)
genres = models.ManyToManyField(Genre)
class Genre(models.Model):
name = models.CharField(max_length=100)
Book
モデルのgenres
フィールドには、Genre
モデルとの多対多の関係が定義されています。Djangoは、自動的に中間テーブルを作成し、Book
とGenre
のオブジェクトを関連付けます。
これらのフィールドを定義することで、Django ORMを使用して、異なるModel同士の関連付けを行うことができます。