2013-01-11 104 views
1

我正在創建一個數據庫模型看起來類似於這個的網站。django緩存外鍵

class Category(models.Model): 
    name = modles.CharField(max_length=30) 

class Photos(models.Model): 
    name = models.CharField(max_length=30) 
    category = models.ForeignKey(Category) 

現在我從照片中選擇一個元素,並將其存儲到緩存中cache.set('object',object,timeout)。現在我嘗試從此緩存訪問photos.name,不執行任何查詢。當我查詢photos.category它執行查詢。有什麼辦法可以防止這種情況發生。我只需要該類別的id,獲得id後,我可以查詢類別緩存以獲取元素。什麼是解決方案來實現這一點。緩存這個已經大大改善了我的基準,我試圖從中獲得更多的性能。

回答

2

如果你只是想要的ID,你可以做photos.category_id

您可能還想要在查詢原始照片時使用select_related()來獲取相關類別。

0

我自己想出了答案。我的問題是,當我從緩存中檢索對象並查詢id時,它會對實際數據庫進行另一個查詢。解決方案很簡單。在將查詢集保存到緩存之前,只需查詢外鍵即可。 like

get photo object from database 
q=photos.category 
cache.set('object',object,timeout) 

記住查詢集是懶惰的。 如果將它保存到數據庫中,下次從緩存中訪問它時,它也會包含外鍵數據。希望這可以幫助。