2013-04-03 3 views
8

私が作業しているタピタイプapiを持っています。私のAPIリソースのリストビューでは、リスト内のオブジェクトの数にかかわらず、ページネーションが適用されていないデータのリスト全体を取得したいと考えています。上限があるカスタムページネイターは必要ありません。ページネーションを完全に無効にしたいのですが。Djangoのtastypieでページネーションを無効にしますか?

ページネーションを処理するためにクライアントを変更する可能性があります(apiはWebブラウザではなくC++ DLLからアクセスされるため、少し複雑ですが可能ですが)。

さまざまなリソースのpaginatorを無効にするスイッチ、またはapiオブジェクトに登録されているすべてのリソースのページングを無効にするapiワイドスイッチがありますか?

+0

https://github.com/toastdriven/django- tastypie/pull/639 – catherine

+1

あなたのプルリクエストが私の質問について何を言っているのかを明確にすることができますか?そのスレッドのページング制限についての議論があるようですが、それを読み上げると、ページネーションを無効にするために何をすべきかについてはっきりしていません。設定する必要があります.API_LIMIT_PER_PAGEをNoneに設定すると、settings.API_MAX_LIMIT_PER_PAGEをNoneに設定すると、制限などを無効にするリソースのMetaクラスに書き込むことができますか?最初のプルリクエストは、基本的なテクニックの機械に精通していない人のために混乱して書かれており、フォローアップのコメントではそれほど明確にはなりません。 – Alex

答えて

10

これを行うには、少なくとも2つの異なるものを設定する必要があります。

class MyResource(ModelResource): 
    ... 
    class Meta: 
     ... 
     max_limit = None 

を次にあなたがリストビューに移動している場合:サイトの設定ファイルで

は、設定され、あなたがのためにページネーションを無効にしたいリソースのメタクラスで

API_LIMIT_PER_PAGE = 0 

を設定しました返されるコンテンツの制限は0になります。

3

DummyPaginatorクラス(元々はhttps://github.com/toastdriven/django-tastypie/issues/777)を定義する代わりに、 (...しかし、それは残念ながらありません)tastypieの一部であるULD:

class DummyPaginator(object): 
    def __init__(self, request_data, objects, resource_uri=None, 
       limit=None, offset=0, max_limit=1000, 
       collection_name='objects'): 
     self.objects = objects 
     self.collection_name = collection_name 

    def page(self): 
     return { self.collection_name: self.objects, } 

次に、あなたのリソースメタに、あなたが設定:

paginator_class = DummyPaginator 
+0

ちょっと、ページ関数を__init__関数の中にネストするべきではありません。 –

+0

@GeorgeThomas - 修正しました、ありがとう! – mnowotka