2010-01-22 47 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] 

应该做它在一个单一的查询。