目次
関連性を定義する
まずは、関連性を定義しておかないと、ダメです
class School(models.Mode):
'''学校'''
…
…
…
class Student(models.Model):
'''生徒'''
school = models.ForeignKey(
School, # 関連させるModelクラス(必須)
on_delete=models.DO_NOTHING, # 削除したときの動作(必須)
related_name='students', # prefetch_relatedするときの名前
db_column='school_id', # 生徒側のDBカラム名
to_field='id' # 学校側のDBカラム名
)
※db_columnのデフォルトは多分変数名+_idでto_fieldのデフォルトはidになってる気がする。
on_deleteの他のは、このへんにかいてありますよ
https://docs.djangoproject.com/ja/4.1/ref/models/fields/#django.db.models.ForeignKey.on_delete
JOINして取得する
select_related
生徒からして学校は一つなので、一つしか紐づかないものに使うのだ
Student.objects.select_related('school').all()
select_relatedの引数にはStudentモデルでschoolを定義しているので、
それを指定するということで文字列でschoolといれる
prefetch_related
学校には、生徒がたくさんいるので、複数紐づく場合にはこっちを使うのだ
School.objects.prefetch_related('students').all()
prefetch_relatedの引数はrelated_nameで設定したものを指定する
