2012-07-15 46 views
5

在Django中,在推薦的設置中,UserProfile實例通過OneToOneField與其User實例鏈接。使用Django中的userprofile檢索用戶的最有效方法

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    data = ... 

什麼是視圖中檢索用戶和配置文件的最有效方式? 我可以做一個select_related()內部連接查詢,以獲得一個數據庫命中兩個對象?還是它總是歸結爲兩個獨立的電話? Django的auth中間件可能甚至在視圖被調用之前檢索用戶實例...有人知道嗎?

+1

爲了提供更多的細節:輪廓可以通過request.user.userprofile或request.user.get_profile()進行檢索。但是,兩者都會導致兩次數據庫命中。我的問題是:我們是否可以使用select_related將其減少爲只有一個內部連接查詢...如果是這樣:是否比「常用」方法更有效? – 2012-07-15 18:32:53

回答

1

用戶配置文件可以使用get_profile()檢索。

見文檔:https://docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information-about-users

+0

Django提到了某處,get_profile緩存了它的結果,但是對於所有這些請求都是如此。因此,與「user.userprofile」相比,我確實看不出優勢。但是讓我感到困惑的是,在同一個模板中同時使用user.get_profile和user.userprofile時,數據庫會被擊中兩次。所以到現在爲止,我始終堅持使用user.userprofile。 Aynway,這兩種檢索配置文件的方法都會導致2個數據庫命中:1x用戶+ 1x配置文件。 select_related調用在一個內部聯接中執行。這是可能的和有利的嗎? – 2012-07-15 18:29:49

相關問題