模型A
有一个ForeignKey
来模拟B
- 我想抓取A
个实例并将它们相互比较,其中B
的密钥是B
是比较参数之一。
Django推迟获取.select_related('B')
相关信息,因此如果我想优化我的代码并提前获取我需要的信息,我可以执行以下操作之一:
B
- 将获取所有相关的.select_related('B__id')
个实例B
- 只会获取所有相关A.B_id
个实例的ID AFAIK都需要加入,我真正需要的只是A.B_id
,这是数据库中的一列,因为这就是我想要比较的。
我在这里错过了一些简单的话吗?我在这里错过了什么?我可以直接取{{1}}吗?是
答案 0 :(得分:1)
首先,你的断言是错误的:select_related('B__id')
没有做任何事情。 select_related调用中的双下划线仅用于跟随后续连接:因此,如果B具有对C的ForeignKey,则select_related('B__C')
也将跟随第二个JOIN。
其次,我对您的优化要求感到困惑。如你所说,你只需要B_id
:所以不需要JOIN,也没有任何优化。如果您只是以正常方式获取A对象,则可以直接参考每个对象的b_id
字段:
a_objects = A.objects.all()
for obj in a_objects:
print a.b_id
这里只进行了一次db调用,没有JOIN。