MPTT树分页

3

我希望能够对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.

如何解决?


你尝试过 list(Thing.objects.all())[5:10] 吗?这可能有效,因为 Django 必须在切片之前获取所有数据。你原来的调用在 SQL 中使用了 LIMIT 和 OFFSET 子句。你可以在 Python shell 中尝试一下,看看是否可行。 - mawimawi
1个回答

2
"

recursetree标签需要传递一个没有应用数组切片限制语法的查询集。

您可以使用模型和管理器实例构造更合适的查询集,或者调用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 %}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接