Sni*_*r03 3 django django-models django-rest-framework
我有这样的模型:
class A:
....
class B:
....
a = model.ForeignKey(A, related_name='a')
....
Run Code Online (Sandbox Code Playgroud)
假设有一个 B 对象。我可以得到这样的对象:
b = B()
a = b.a
Run Code Online (Sandbox Code Playgroud)
那么获取与A相关的所有B对象的最简单方法是什么?
另外,我可以获得 A 的列表。
list_a = A.objects.filter()
Run Code Online (Sandbox Code Playgroud)
那么获取与list_a中的A对象相关的B列表的最简单方法是什么?
还有一个相反的情况:我有一个 B 列表:
list_b = B.objects.filter()
那么,获取list_b中与B对象相关的A对象的列表的最简单且优化的方法是什么呢?
B.objects.filter(a__in=a_list)
Run Code Online (Sandbox Code Playgroud)
请注意,您可以像这样过滤相关对象(相反,如果执行两个查询,则将其合并为一个)
例如,如果您的 a_list 是这样的查询:
a_list = A.objects.filter(field=2)
Run Code Online (Sandbox Code Playgroud)
你可以像这样过滤B:
B.objects.filter(a__field=2)
Run Code Online (Sandbox Code Playgroud)
这更具可读性,django 也可以优化它)
更新:您可以用同样的方式查询反向关系
A.objects.filter(b__in=b_list)
A.objects.filter(b__field=2)
Run Code Online (Sandbox Code Playgroud)
请注意,最好将代码更改为
a = model.ForeignKey(A, related_name='b')
Run Code Online (Sandbox Code Playgroud)
b
是尊敬关系中字段的名称,因此an_a_instance.b.all()
返回b
指向给定的所有实例a_instance
归档时间: |
|
查看次数: |
2824 次 |
最近记录: |