2010-01-22 75 views
1

我有這些模型:django的:更復雜的過濾器

類A(模型): 通

類B(模型): 一個= ForeignKey的(A)

C類(型號): b = ForeignKey(B)

我有一個名爲mya的實例。

我想找到所有的B對我的A,對於其中有至少一個C.我可以在一行做到這一點:

bsiwant = [CB在C.objects.filter C(b__a = = mya)](並以某種方式將其唯一標識)

...但想必會導致很多查詢。有沒有辦法通過過濾器來完成單個查詢?

回答

1

其實,這應該這樣做:

B.objects.filter(a=mya, c__b__isnull=False) 

B.objects.filter(a=mya, c__b=F('id')) 
1
vals = C.objects.filter(b__a=mya).select_related("b").distinct() 
bsiwant = [c.b for c in vals] 

應該做它在一個單一的查詢。