我使用django 1.10.1,postgres 9.5和redis。 我有一個存儲用戶投票,看上去就像一個表:試圖儘量減少到數據庫投票表的次數
==========================
object | user | created_on
==========================
其中object
和user
分別爲外鍵自身表的id
列。
問題是,在許多情況下,我必須在一個頁面中列出很多對象。如果用戶登錄或認證,我必須檢查每個對象是否被投票(並根據結果採取行動,例如show vote
或unvote
按鈕)。所以在我的模板中,我必須爲頁面中的每個對象調用這樣的函數。
def is_obj_voted(obj_id, usr_id):
return ObjVotes.objects.filter(object_id=obj_id, user_id=usr_id).exists()
因爲我可能有幾十對象在一個頁面中,我發現,使用django-debug-toolbar
,因爲我訪問只是一行每個查詢單獨的數據庫訪問可能需要超過一秒,並在連續出現這種情況方式爲頁面中的所有對象。更糟的是,我在其他頁面中使用來自該表格的類似查詢(即,僅使用user
或僅使用object
進行過濾)。
我試圖實現什麼,我認爲這是正確的做法是找到一種方法來訪問數據庫只是一次獲取所有投票過濾的某些用戶對象(也許當用戶登錄或在需要這種數據庫訪問的第一頁命中時),然後根據頁面需求進一步將其過濾爲我想要的任何內容。由於我使用redis和django-cacheops
應用程序,它可以幫助我完成這項工作嗎?
你是如何得到你的object_ids請用該部分代碼更新的。 redis和django-cache在哪裏出現? – e4c5