2011-12-14 3 views
2

mpttmodel 인스턴스의 간단한 페이지 매김을 만들고 싶습니다.mptt 트리 페이지 매김

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.

어떻게 그것을 해결하기 위해 나는이 모델이 있나요?

+0

당신이 목록 (Thing.objects.all()) [5를 시도해 봤어 : 10] - 장고는 조각 내기 전에 모든 데이터를 가져와야하기 때문에 작동 할 수도 있습니다. 원래 호출은 SQL에서 LIMIT 및 OFFSET 절을 사용합니다. 파이썬 셸에서이를 수행하여 작동하는지 확인할 수 있습니다. – mawimawi

답변

2

recursetree 태그에는 배열 슬라이스 제한 구문이 적용되지 않은 쿼리 세트가 전달되어야합니다.

당신은 더 적합한 검색어 세트를 구성하거나 recursetree를 호출하고 노드를 통과, 그들을 필터링하고 필요하면 다시 선택된 노드와 거기에서 recursetree를 호출 할 model and manager instances을 사용할 수 있습니다,하지만 좀 더 복잡합니다. 당신이 얻을 수있는 것처럼

는 지금 보이는 당신과 함께 원하는 :

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

그리고 템플릿 :

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