在Django中缓存ManyToMany“自我”关系

时间:2011-04-28 11:50:33

标签: django django-models

我有一个自引用ManyToMany字段的模型:

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 个答案:

答案 0 :(得分:1)

我认为你正在寻找一个错误的方向。您可能希望在这种情况下使用custom manager来构建查询集,缓存它以及您想要的任何其他内容。

用法,可能如下所示:

suite_tree = Suite.mymanager.construct_tree();