2014-09-01 7 views
0

모델의 관리자 페이지를로드 할 때마다 MySQL DB가 응답하지 않는 것으로 나타났습니다. 내가 조사하고 쿼리 Model.objects.all() 무수한 시간을 실행했다 발견, 어떤 문제가 있기 때문에 django 캐싱이 작동하지 않습니다,하지만 난 장고 shell.I에 대한 쿼리를 실행하여 캐싱 부분을 확인 여전히 잃어버린 오전, 나는 코드가 이와 유사한 :Django의 foriegn 키 필드에서 heavy objects.all 쿼리가 실행되는 횟수를 줄이는 방법은 무엇입니까?

class Car(models.Model): 
    name = models.CharField(max_length=150, db_index=true) 

class Accessories(models.Model): 
    name = models.CharField(max_length=120, db_index=true) 
    cars = models.ManyToManyField(Car) 

는 매우 간단하고 나는 아직도 무슨 일이 일어나고 있는지 이해 할 수없는 무엇입니까? 나는 당신이이 같은 prefetch_reload 메커니즘을 사용할 필요가있는 경우에 self.cars.all() 같은 곳 인쇄 된 모든 관련 모델 객체를 가지고 __str__ 방법을 재정의 추측하고

+0

settings.py에서'debug = True'로 실행하고 있습니까? , 반환 "% s (% s)을"% (self.name : 나는 :) 찾고 정확히 무엇 –

답변

1

는 :

Accessories.objects.all().prefetch_related('cars') 

이 같은 작업 부하를 줄일 수 매번 MySQL DB로 이동하는 대신 사전에 채워진 쿼리 세트에서 주어진 액세서리에 대한 자동차를 프리 페치합니다.

+0

는 완전히이 무엇 내'__str__' 기능 '데프 __str __ (자기)는 손톱 ",".join ([self.cars.all()의 car.name)))'' –