【问题标题】:django: more complicated filterdjango:更复杂的过滤器
【发布时间】:2010-01-22 22:15:05
【问题描述】:

我有这些模型:

A 类(型号): 通过

B级(型号): a = 外键(A)

C 类(型号): b = 外键(B)

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

我想为我的 A 找到所有 B,其中至少有一个 C。我可以在一行中做到这一点:

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

...但大概这会引起很多查询。有没有办法使用过滤器来执行单个查询?

【问题讨论】:

    标签: django filter


    【解决方案1】:
    vals = C.objects.filter(b__a=mya).select_related("b").distinct()
    bsiwant = [c.b for c in vals]
    

    应该在一个查询中完成。

    【讨论】:

      【解决方案2】:

      其实这样就可以了:

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

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

      【讨论】:

        猜你喜欢
        • 2018-01-16
        • 2011-02-06
        • 2013-06-03
        • 2022-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-06
        • 1970-01-01
        相关资源
        最近更新 更多