Django - 获取外键

时间:2011-11-13 15:53:57

标签: django foreign-keys deferred-query

模型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}}吗?是

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。

相关问题