2011-04-28 39 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();