我保持简单。我有3个模型。
class C(models.model):
some_field = models.BooleanField(default=False)
class B(models.model):
b = models.ForeignKey(C)
class A(models.model):
a = models.ForeignKey(B)
我需要一个获取A.a.b.some_field = True的查询过滤器。我该如何实现?
答案 0 :(得分:1)
您可以使用以下方法过滤满足以下条件的A
个对象:
A.objects.filter(a__b__some_field=True)
这将生成一个看起来或多或少像的查询:
SELECT a.*
FROM a
JOIN b ON a.a_id = b.id
JOIN c ON b.b_id = c.id
WHERE c.some_field = 1
双下划线(__
)可用于查找“直通”关系(例如ForeignKey
,OneToOneField
和ManyToManyField
)。如果是...- to-many字段,则存在进行量化。但是这里ForeignKey
是多对一的关系,所以没关系。
注意:
ForeignKey
(或B
)中的C
通常被命名为b
(或c
),而不是a
(或b
),因为那是当前模型的名称。关系的名称通常指定目标对象与当前模型的关系。