장고의 prefetch_related에 문제가 있습니다.Django prefetch_related는 많은 필드에서 항상 빈 배열을 생성합니다.
여기 내 모델입니다.
class Terrain(models.Model):
name = models.CharField(max_length=255)
class Route(models.Model):
name = models.CharField(max_length=255)
terrains = models.ManyToManyField(Terrain)
그리고 prefetch_related를 사용하면 어떻게됩니까?
>>> Route.objects.all()[0].terrains.all()
[<Terrain: Beach>]
>>> Route.objects.all().prefetch_related('terrains')[0].terrains.all()
[]
내가 뭘 잘못하고있어?
파이썬 버전 2.7 장고 버전 1.4 DB 백엔드 : SQLite는 (나는 또한 MySQL과 노력, 같은 결과) 여기
그리고는 (IPython 콘솔에서) 일부 쿼리 디버깅이다 그래서 당신은 거기에 무슨 일이 일어나고 있는지 볼 수 있습니다.
In [11]: Route.objects.all().prefetch_related('terrains')[0].terrains.all()
DEBUG 2012-06-22 20:10:09,569 util (0.000) SELECT "asdf_route"."id", "asdf_route"."name" FROM "asdf_route" LIMIT 1; args=()
DEBUG 2012-06-22 20:10:09,571 util (0.000) SELECT ("asdf_route_terrains"."route_id") AS "_prefetch_related_val", "asdf_terrain"."id", "asdf_terrain"."name" FROM "asdf_terrain" INNER JOIN "asdf_route_terrains" ON ("asdf_terrain"."id" = "asdf_route_terrains"."terrain_id") WHERE "asdf_route_terrains"."route_id" IN (1); args=(1,)
Out[11]: []