2011-12-14 21 views
2

mpttmodelインスタンスの単純なページ番号を付けたいと思います。私は、このモデルていますmpttのページ番号

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

私はオフセットを持つオブジェクトをretriveしようとすると問題がある、のような:

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] - これは、Djangoがスライスする前にすべてのデータを取得しなければならないので、うまくいく可能性があります。元の呼び出しでは、SQLでLIMIT句とOFFSET句が使用されます。これをPythonシェルで実行し、それが機能するかどうかを確認します。 – 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 %}