嵌套查询过滤器_ Django

时间:2019-01-26 11:25:29

标签: 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)

我需要一个获取A.a.b.some_field = True的查询过滤器。我该如何实现?

1 个答案:

答案 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

双下划线(__)可用于查找“直通”关系(例如ForeignKeyOneToOneFieldManyToManyField)。如果是...- to-many字段,则存在进行量化。但是这里ForeignKey是多对一的关系,所以没关系。

  

注意ForeignKey(或B)中的C通常被命名为b(或c),而不是a(或b),因为那是当前模型的名称。关系的名称通常指定目标对象与当前模型的关系。