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

20
2个回答

34

你可以使用__in

A.objects.filter(b__in=bs)

或者你可以完全避免创建bs queryset,并直接在查询中跟随关系:

A.objects.filter(b__<bcondition>=<bvalue>)
例如,如果用于创建bs的筛选器如下:
bs = B.objects.filter(name="Banana")

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

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

请记住,您可以使用多种不同的过滤方式,并且过滤功能非常广泛,因此值得查看过滤文档


请问您能详细说明第二个方法吗?我不理解在这个上下文中bconditionbvalue是什么意思。 - DarkFranX
这是OP用来获取bs的任何表达式。 - Daniel Roseman
我不记得我们可以直接在过滤查询中使用相关模型作为字段。+1 - Anupam

1
扩展Daniel的解决方案,如果使用相关模型,使用__in可能会返回重复记录。
例如: A.objects.filter(b__in=bs).count() 可能大于 A.objects.all().count() 对我来说,使用distinct()this SO答案中所提到的一样有效。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接