DjangoでModelを利用してJOINする方法(カラム名指定)

関連性を定義する

まずは、関連性を定義しておかないと、ダメです

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で設定したものを指定する

https://docs.djangoproject.com/ja/4.1/ref/models/fields/

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です