2017-01-23 1 views
0

중첩 된 외부 키를 통해 관련 선택 : 내 코드를 더 이해가 함수를 정의하는 것입니다으로서 나는이 같은 AList을 정의하고장고 : 내가 가지고있는

class A(models.Model): 
    pass 
class AList(models.Model): 
    list_of_a= models.ManyToManyField(A) 
    random_statistical_info=models.CharField() 
class B(models.Model): 
    a_list = models.ForeignKey(AList) 

을 때의 목록과 사용, 그리고 A. 즉, 메타 데이터 물건 등

지금, 내 질문은, 어떻게 내가 이상 필터 쿼리를 실행할 때 나는 모든 A 인스턴스뿐만 아니라 AList에서 x을 저장할 수 select_related/prefetch_related 때문에 사용할 수 있습니다 B?

답변

0

다음은 작동합니다

b_qs = B.objects.prefetch_related('a_list__list_of_a') 

지금

for b in b_qs: 
    x = b.a_list.list_of_a.all() 

세 DB를 쿼리가 발생합니다 :

가져 오기 테이블 B, 테이블 AList, 테이블 AINNER JOIN 온 사용 m2n 표 :

1 SELECT app_b.* 
    FROM app_b 

2 SELECT app_alist.* 
    FROM app_alist 
    WHERE app_alist.id IN (1, 2, ...) # fk values from 1 

3 SELECT (app_alista.alist_id) AS _prefetch_related_val_alist_id, 
    app_a.* 
    INNER JOIN app_alista ON app_a.id = app_alista.a_id 
    WHERE app_alista.alist_id IN (1, 2, ...) # pk values from 2