mptt树分页

时间:2011-12-14 07:54:00

标签: django django-mptt

我想对mpttmodel实例进行简单的分页。我有这个模型:

class Thing(MPTTModel):
    text = models.TextField()
    parent = TreeForeignKey('self', null=True, blank=True, related_name='children')

问题在于,当我尝试使用偏移量来检索对象时,例如:

Thing.objects.all()[5:10]

{% recursetree things %}模板标记引发异常:Caught AssertionError while rendering: Cannot reorder a query once a slice has been taken.

如何解决?

1 个答案:

答案 0 :(得分:2)

recursetree标记需要传递给它的查询集,该查询集没有应用数组切片限制语法。

您可以使用model and manager instances构建更合适的查询集,也可以调用recursetree并遍历节点,过滤出来并再次使用选定的节点从中调用recursetree需要,但这有点复杂。

现在,看起来你可以实现你想要的目标:

nodes = [node.get_descendants(include_self=True) 
         for node in Thing.objects.all()[5:10]]

在模板中:

{% for node in nodes %}
    {% recursetree node %}...{% endrecursetree %}
{% endfor %}