2014-03-04 83 views
3

根據文檔,那麼你應該能夠捕獲與select_related()onetoone關係時的反向關係。但它不起作用,那麼我可能會錯過什麼?反向select_related爲onetoone字段不工作

我的類看起來是這樣的:

class MainPage(models.Model): 
    book = models.OneToOneField(Book, primary_key=True) 
    text = models.TextField(blank=True) 

我能做到這一點罰款:

book = Book.objects.get(id=book_id, active=True) 
main_page = book.mainpage 

但是這樣做,像這樣不降低數據庫調用:

book = Book.objects.select_related('mainpage').get(id=book_id, active=True) 
main_page = book.mainpage 
+0

嘿,請留下反饋意見(即upvote,或downvote,或留下評論)的答案。它只會幫助我們更好地回答/寫作:http://blog.codinghorror.com/how-to-write-without-writing/ – Pratyush

+0

根據https://code.djangoproject.com/ticket/7270這應該是可能的,但從Django 1.9開始,我仍然無法使select_related工作在一對一的反向關係上。 – Symmetric

回答

1

我猜你打算只命中一個sql查詢(使用一對一連接)。這可能對於工作:

book = Book.objects.get(mainpage__book_id=book_id, active=True) 

編輯:

在你的問題的查詢不只是與查詢集工作,因爲select_related作品而.get返回一個實例對象。因此,這應該工作:

book = Book.objects.select_related('mainpage').filter(id=book_id, active=True)[0] 
main_page = book.mainpage 
+0

其實,你可以用get來使用它;它只是'get'需要成爲ORM調用中的最後一塊:''book = Book.objects.select_related('mainpage')。get(id = book_id,active = True)'''' – foresmac