代码之家  ›  专栏  ›  技术社区  ›  Сыч

避免在用户折叠部分嵌套集时获取整个嵌套集的SQL查询

  •  0
  • Сыч  · 技术社区  · 16 年前

    我试图将django mptt和contrib.admin联系在一起,提供比管理员中的简单列表更友好的内容。因为树应该很大(否则我不会使用嵌套集),所以用户应该能够展开和折叠部分树。

    当用户展开、折叠或展开分支(使用ajax)时,还会设置一个cookie,其中包含以逗号分隔的折叠分支列表。这样,下一次这个用户访问我的Django MPTT动力模型的管理员时,我可以向他展示他离开的确切状态下的树。现在我想使用这个折叠的分支列表,通过只获取树中所需的部分来减轻数据库的负担。

    有办法有效地做到这一点吗?我搜索的解决方案是对每个分支进行查询,这样他们就可以避免查询一个分支崩溃时的情况,但这对我来说并不是很有效。也许有固定数量的查询是可能的?

    1 回复  |  直到 16 年前
        1
  •  0
  •   Daniel Roseman    16 年前

    你没有真正解释你在做什么,所以很难帮上忙。(你拿这棵树干什么?你怎么展示的?你希望用户能够做什么?)

    django mptt树中的每个元素都有一个 get_children() 方法-并使用可选的 include_self=True 参数可以得到元素及其所有子元素的列表。您可以使用此方法预先筛选子树,以便只显示其中的部分,如果这是您想要的。

    如果希望用户能够在不重新加载页面的情况下动态展开和折叠树的部分,则需要使用ajax。有很多支持ajax的treeview控件——我自己用jquery编写了一个——毫无疑问,其中一个会按照您想要的方式做一些事情。

    推荐文章