prefetch_related


prefetch related


prefetch relatedはoutific-key、one-to-one、multi-to-oneなど、すべての関係で使用できます.
(正参照、逆参照ともに使用可能であり、逆参照の場合のみsetで逆参照を表す.)

from django.db import models


class Person(models.Model):
    name = models.CharField(max_length=16)

    def __str__(self):
        return self.name


class Car(models.Model):
    name = models.CharField(max_length=32)
    owner = models.ForeignKey(Person)

    def __str__(self):
        return self.name
上図に示すモデルは以下の通りです.

例)ID 1のownerの自動車名出力
owner = Person.objects.prefetch_related('car_set').get(id=1)
					#역참조라서 set을 붙임. (차가 사람을 정참조),(사람이 차를 역참조)
for car in owner.car_set.all():# id가 1번인 사람의 차를 모두 프린트한다.
    print(car.name)
  • PersonモデルをIDとして取得し,同時にCarモデルにPersonのcarを見つけた.
  • for文で所有する車名を出力
  • 上のコードはownerというPersonインスタンスで、すべての車の名前を出力できる簡単なコードです.
    prefetch relatedメソッドは1:Nの関係1(例ではPerson)にとって使いやすい.