2011-04-28 76 views
1

關係,我有自引用多對多領域的典範:緩存多對多「自我」在Django

class Suite(models.Model): 
    suites = models.ManyToManyField("self", related_name="parents", 
              summetrical=False 
            ) 

顯示套房列表的當前使用率取「master_suites」(套房,具有零列表父母),並從遞歸地開始「suite.subsuites.all()」開始,直到所有人都用盡。

目前的方式是爲每個這樣的套件生成一個數據庫查詢,我想向它添加緩存。

整個過程可以通過首先加載套房列表來完成,Suite.objects.all();和一個子套件列表:Suite.subsuites.through.all()並使用這兩個數據集來構造樹。

我想將此「邏輯」添加到ManyRelatedManager,緩存Suite.subsuites.through.all()結果,並在視圖中的循環期間使用緩存。

但我發現沒有辦法設置自己的自定義ManyRelatedManager ...我該怎麼做?

回答

1

我認爲你正在看錯方向。您可能希望在這種情況下使用custom manager,以構建您的查詢集,緩存它以及其他任何您想要的內容。

用法,看起來是這樣的:

suite_tree = Suite.mymanager.construct_tree();