我有这样的模型:
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对象列表的最简单,最优化的方法是什么?
答案 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
实例