2017-01-23 12 views
0

上関連の選択、私が持っている:ジャンゴ:ネストされた外部キー

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のリストを使用したときに私のコードは、より多くの意味を作る関数を定義しようとしているとして、このようなAListを定義し、ではないのですA.すなわち、メタデータのもの、など

は今、私の質問は、どのように私はオーバーフィルタクエリを実行すると、私はすべてのAのインスタンスだけでなく、AListxを保存することができselect_related/prefetch_relatedので、使用することができますB

答えて

0

次のように動作します:上INNER JOINを使用して

フェッチテーブルB、テーブルAList、そしてテーブルA:今

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

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

は3デシベルクエリになります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 
関連する問題