2010-10-01 100 views
0

假設我有兩個模型,AB,其中一個A可以有多個B與它相關。給定一個QuerySet爲A對象,如何創建一個QuerySet,其中包含與所有這些A對象相關的所有B對象?如何使用Django QuerySet選擇多個?

對於那些誰也碰巧說LINQ,我想是這樣的:

queryableOfA.SelectMany(a => a.Bs) 

更妙的是如何鏈A的例子 - 「乙 - > C,即下面的LINQ:

queryableOfA.SelectMany(a => a.Bs).SelectMany(b => b.Cs) 

(返回通過B相關的所有A對象的所有C對象的 「查詢集」)

回答

4

對於queryse一個對象的T,你可以做一個「在」啓動查詢:

B.objects.filter(a__in=MyQueryset) 

如果你想找到通過B到A有關的所有C對象,你需要遵循通過雙下劃線語法的關係。例如:

C.objects.filter(b__a__in=MyAQueryset) 
+0

A是封裝模型的類。對對象的filter()調用返回您正在查找的查詢集。如果您需要一個項目使用.get(),但是如果找到多個項目,則會引發A.MultipleObjectsReturned錯誤。 – Evgeny 2010-10-01 18:13:48