2012-02-07 217 views
0

我有一個事件模型,其中包含一個「開始時間」字段,該字段以UTC格式存儲並映射到數據庫。該模型還有一個start_local()幫助程序函數,用於在用戶當地時間將事件作爲Datetime對象返回。這通過Event實例對用戶的引用發生,然後get_profile()具有時區信息。如何在Django模型實例之間共享公共數據?

這可行,但問題是,當我顯示長列表事件時,由於用戶和配置文件查找,每行有2個數據庫查詢。這很愚蠢,因爲行之間的時區不是可變的,但模型不知道。我目前的設置將時區信息傳遞給start_local(),這可以解決速度問題,但從設計的角度來看,這並不令人愉快。事件實例知道如何獲取用戶的時區,並且不得不依賴於調用函數來獲得幫助,以避免令人討厭的大表現。

有沒有人有改進將時區信息傳遞到幫助函數?

回答

0

使用select_related。我忘記了OneToOne選擇相關的介紹,但它適用於1.3。

https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.select_related

User.objects.select_related('userprofile') 
# assuming the profile is called userprofile 
Event.objects.select_related('user', 'user__profile') 
+0

這是一個相當不錯的答案,確實查詢的數量減少幾乎我讓他們與我目前的解決方案的地步。你的優點是更清潔。 – LVB 2012-02-07 19:52:19