django:更复杂的过滤器

时间:2010-01-22 22:15:06

标签: django filter

我有这些模特:

A类(型号):    通

B级(型号):    a = ForeignKey(A)

C类(型号):    b = ForeignKey(B)

我有一个名为mya的A实例。

我想为我的A找到所有B,其中至少有一个C.我可以在一行中完成:

bsiwant = [c.b for c in C.objects.filter(b__a == mya)](并以某种方式将其统一)

...但可能会导致许多疑问。有没有办法使用过滤器来执行单个查询?

2 个答案:

答案 0 :(得分:1)

实际上,应该这样做:

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

B.objects.filter(a=mya, c__b=F('id'))

答案 1 :(得分:1)

vals = C.objects.filter(b__a=mya).select_related("b").distinct()
bsiwant = [c.b for c in vals]

应该在一个查询中完成。