2011-11-13 77 views
0

模型A有一个ForeignKey以模型B - 我想获取A实例并将它们相互比较,其中B的键是比较参数之一。Django - 获取外键

Django的缓建获取B相关信息,所以如果我想优化我的代码,并提前取我需要我可以做下列之一的信息:

  • 使用.select_related('B') - 这将获取所有相关B实例
  • 使用.select_related('B__id') - 这将只获取所有相关B实例

据我所知都需要一个连接的ID,所有我真正需要的是A.B_id这是数据库中的一列,因为这是我想要比较的。

我在这里错过了一些简单的东西吗?我在这里错过了什么?我可以直接取A.B_id吗?是

回答

1

首先,你的断言是错误的:select_related('B__id')什么也没做。 select_related调用中的双下划线仅用于后续连接:因此,如果B的外键为C,则select_related('B__C')也会在第二个JOIN之后。其次,我很困惑你的优化要求。正如你所说,你只需要B_id:所以不需要JOIN,也没有任何优化。如果你只是得到正常的方式你的一个对象,你可以参考b_id场直接上他们每个人:

a_objects = A.objects.all() 
for obj in a_objects: 
    print a.b_id 

这里只由单一的DB调用,没有联接。