Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django mptt树分页_Django_Django Mptt - Fatal编程技术网

Django mptt树分页

Django mptt树分页,django,django-mptt,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%}模板标记引发异常:呈

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

class Thing(MPTTModel):
    text = models.TextField()
    parent = TreeForeignKey('self', null=True, blank=True, related_name='children')
问题是,当我尝试用偏移量检索对象时,例如:

Thing.objects.all()[5:10]
{%recursetree things%}
模板标记引发异常:
呈现时捕获到断言错误:获取切片后无法重新排序查询。

如何解决它?

标记需要传递一个查询集,该查询集没有应用数组切片限制语法

您可以使用来构造更合适的查询集,或者调用
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 %}
您是否尝试过list(Thing.objects.all())[5:10]-这可能会起作用,因为Django必须在切片之前获取所有数据。您最初的调用在SQL中使用了一个LIMIT和OFFSET子句,您可以在python shell中这样做,看看它是否有效。