嵌套查询过滤器_Django

bab*_*eir 4 django django-queryset

我保持简单。我有 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)
Run Code Online (Sandbox Code Playgroud)

我需要一个获取 Aabsome_field = True 的查询过滤器。我怎样才能做到这一点?

Wil*_*sem 5

您可以使用以下方法过滤A满足此条件的对象:

A.objects.filter(a__b__some_field=True)
Run Code Online (Sandbox Code Playgroud)

这将生成一个查询,或多或少类似于:

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
Run Code Online (Sandbox Code Playgroud)

双下划线 ( __) 可用于“查看”关系(如ForeignKeys、OneToOneFields 和ManyToManyFields)。如果是...对多字段,则这是存在量化的。但这里的ForeignKeys 是多对一的关系,所以这并不重要。

注意ForeignKeys to B(or C) 通常命名为b(or c),而不是a(or b),因为这是当前模型的名称。关系的名称通常指定其目标对象与当前模型的关系。