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

时间:2009-05-21 17:22:12

标签: sql django nested-sets django-mptt

我试图通过提供比管理员中的平面列表更友好的东西来将django-mptt和contrib.admin联系在一起。因为树应该是大的(否则我不会使用嵌套集),用户应该能够扩展和折叠它的一部分。

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

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

1 个答案:

答案 0 :(得分:0)

你并没有真正解释你在做什么,所以有点难以帮助。 (你在用树做什么?你是如何展示它的?你希望用户能做什么?)

Django-MPTT树中的每个元素都有一个get_children()方法 - 使用可选的include_self=True参数,您可以获得该元素及其所有子元素的列表。您可以使用它来预过滤子树,以便只显示它的一部分,如果这是您想要的。

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