2013-06-17 2 views
0

외래 키 또는 다 대다를 통해 모델 개체가 다른 많은 개체의 집계 인 경우 해당 개체의 쿼리 세트를 반복하면 관련 개체에 개별 쿼리가 수행됩니까?Django에서 외래 키가있는 쿼리 세트의 동작

는 해당 개체에 대한 개별 쿼리의 parentorg, contracts 또는 plan 필드 내에서 모든 비교 결과 않습니다, 나는

class aggregateObj(models.Model): 
    parentorg = models.ForeignKey(Parentorgs) 
    contracts = models.ForeignKey(Contracts) 
    plans = models.ForeignKey(Plans) 

이 내가 objs을 반복하는 경우

objs = aggregateObj.objects.all() 

을 실행 말할 수 있습니다 ?

답변

3

예, 기본적으로 모든 비교는 개별 쿼리를 만듭니다. 그 주위를 얻으려면, 당신은 검색어 세트 방법은 초기 쿼리에서 모든 관련 개체를 가져올합니다 ('뒤로'방향과 prefetch_related의 관계)이 select_related를 사용할 수있다 :

이 검색어 세트를 돌려 자동 것이다 외래 키 관계를 "따르고"쿼리를 실행할 때 추가 관련 데이터를 선택합니다. 이것은 (때로는 많은) 큰 쿼리를 발생시키는 성능 향상이지만 나중에 외래 키 관계를 사용하면 데이터베이스 쿼리가 필요하지 않음을 의미합니다.

1

예. 이를 방지하려면 쿼리 시간에 select_related을 사용하여 JOIN을 통해 관련 데이터를 가져옵니다.