2011-05-28 54 views
0

數據庫負載我在我的模型,它決定了如果Entry是計費下面的代碼:減少與此模型屬性

class Entry(models.Model): 
    [ .. ] 
    @property 
    def is_billable(self): 
     return self.tags.filter(billable=False).count() == 0 

條目有FK到項目中。當確定剩餘預算上Project,我遍歷所有條目,並檢查是否is_billable返回true:

@property 
def remaining_budget(self): 
    [ .. ] 
    for entry in self.entry_set.all(): 
     if entry.is_billable: 
      remaining_budget -= entry.minutes 

這對數據庫的那種沉重,因爲它會激發每個條目的查詢。我正在尋找一種優化方式,歡迎提示和提示。

回答

0

如果您需要擺脫數查詢的,那麼爲什麼不:

  1. 一個is_billable字段添加到您的Entry模式的基礎上標籤的對象
  2. 寫信號,此字段設置爲真或假(如果添加is_billable == True一個新的標籤,然後將其設置真/如果標籤被取下,並用is_billable == True沒有標籤仍然存在,然後將其設置爲False,等等)

當然,如果你的數據可以通過其他改變應用程序或手動,這種方法不應該是首選。

+0

這是我已經考慮過的事情,但我想知道是否有更好的方法來解決這個問題。謝謝 :)。 – Bjorn 2011-05-29 18:56:21