2011-11-13 76 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調用,沒有聯接。