目次
関連性を定義する
まずは、関連性を定義しておかないと、ダメです
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
で設定したものを指定する