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()
假设我有两个模型:
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()