Django获取外键对象列表

时间:2018-06-22 09:47:09

标签: django django-models django-rest-framework

我有这样的模型:

class A:
....


class B:
....
a = model.ForeignKey(A, related_name='a')
....

我们假设有一个B对象。 我可以获得这样的对象:

b = B()
a = b.a

那么获取与A相关的所有B对象的最简单方法是什么?

另外, 我可以得到A的列表。

list_a = A.objects.filter()

那么获取与list_a中的A对象相关的B列表的最简单方法是什么?

另一种相反的情况:我有一个B列表:

list_b = B.objects.filter()

那么获取与list_b中的B对象相关的A对象列表的最简单,最优化的方法是什么?

1 个答案:

答案 0 :(得分:4)

B.objects.filter(a__in=a_list)

请注意,您可以像这样对相关对象进行过滤(相反,如果执行两个查询可以同时进行过滤)

例如,如果您的a_list是这样的查询:

a_list = A.objects.filter(field=2)

您可以这样过滤B:

B.objects.filter(a__field=2)

更具可读性,并且django也可以对其进行优化)

更新:您可以用相同的方式查询反向关系

A.objects.filter(b__in=b_list)
A.objects.filter(b__field=2)

请注意,最好将代码更改为

a = model.ForeignKey(A, related_name='b')

b是关系关系中字段的名称,因此an_a_instance.b.all()返回指向给定b的所有a_instance实例