2011-12-14 2 views
2

Je veux faire une pagination simple des instances de mpttmodel. J'ai ce modèle:mptt tree pagination

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

Le problème est, quand j'essaie de retrive objets avec offset, comme:

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

{% recursetree things %} tag modèle soulève exception: Caught AssertionError while rendering: Cannot reorder a query once a slice has been taken.

Comment le résoudre?

+0

Avez-vous la liste essayer (Thing.objects.all()) [5 : 10] - cela pourrait fonctionner, puisque Django doit récupérer toutes les données avant de les découper. Votre appel d'origine utilise une clause LIMIT et OFFSET dans votre SQL. Vous pouvez le faire dans un shell python et voir si cela fonctionne. – mawimawi

Répondre

2

La balise recursetree nécessite la transmission d'un jeu de requêtes auquel la syntaxe de limite de découpage de tableau ne s'applique pas.

Vous pouvez utiliser le model and manager instances pour construire un plus approprié queryset ou appelez recursetree et traverser les nœuds, les filtrer et appeler recursetree de celui-ci avec les noeuds sélectionnés à nouveau si vous avez besoin, mais c'est un peu plus compliqué.

En ce moment, vous ressemble pourriez obtenir ce que vous voulez:

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

Et dans le modèle:

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