Django:如何获取查询集的相关对象?

Django: How to get related objects of a queryset?

假设我有两个模型:

A:
    pass

B:
    a = foreign_key(A)

现在,我有一个查询集

bs = B.objects.filter(...)

我想获取 bs 的所有 a,这意味着每个 b 引用的 a 都在 b bs.

有办法吗?我想在sql中,一个简单的连接就可以了,我不知道django是否支持这个。

您可以使用 __in:

A.objects.filter(b__in=bs)

或者您可以完全避免创建 bs 查询集,直接在查询中遵循关系:

A.objects.filter(b__<bcondition>=<bvalue>)

例如,如果用于创建 bs 的过滤器是:

bs = B.objects.filter(name="Banana")

然后您可以使用以下方法过滤 A 个对象:

A.objects.filter(b__name="Banana")

请记住,您可以通过多种不同的方式进行筛选,而且筛选功能非常广泛,因此值得回顾 filter documentation

如果使用相关模型,使用 __in 扩展 Daniel 的解决方案可能 return 重复记录。

例如:

A.objects.filter(b__in=bs).count() 可能超过 A.objects.all().count()

对我来说,使用 distinct() 就像 this 中提到的那样工作

A.objects.filter(b__in=bs).distinct()