【问题标题】:nested query filter _ Django嵌套查询过滤器_Django
【发布时间】:2019-01-26 11:25:28
【问题描述】:

我保持简单。我有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 的查询过滤器。我怎样才能做到这一点?

【问题讨论】:

    标签: django django-queryset


    【解决方案1】:

    您可以通过以下方式过滤满足此条件的 A 对象:

    A.objects.filter(<b>a__b__some_field=True</b>)

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

    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
    

    双下划线 (__) 可用于“透视”关系(如 ForeignKeys、OneToOneFields 和 ManyToManyFields)。如果它是...对多的字段,这是存在量化的。但是这里ForeignKeys 是多对一的关系,所以没关系。

    注意ForeignKeys 到B(或C)通常命名为b(或c),而不是a(或b),因为这是当前模型的名称。关系的名称通常指定它所针对的对象与当前模型的关系。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-14
      • 2013-01-28
      • 2018-05-10
      • 2014-06-16
      • 2016-06-09
      • 2020-08-09
      • 2021-06-26
      相关资源
      最近更新 更多