2013-04-03 22 views
8

我有一個tastypie api,我正在爲我的api資源工作,並且在列表視圖中,我希望獲得沒有應用分頁的整個數據列表,無論列表中有多少個對象。我不需要一個具有高限制的自定義分頁程序,我想完全禁用分頁。在Django tastypie中禁用分頁?

我可能會修改我的客戶端來處理分頁(api是從一個C++ DLL而不是一個web瀏覽器訪問的,所以它有點複雜但可能),但如果我可以禁用它,那會更容易。

是否有切換爲不同的資源禁用Paginator,或者可能是一個API寬開關禁用所有註冊到該API對象資源的分頁?

+0

https://github.com/toastdriven/django- tastypie/pull/639 – catherine 2013-04-03 18:49:55

+1

你能否澄清一下拉請求對我的問題所說的話?似乎有關於該線程的分頁限制的討論,但閱讀它我不清楚我應該做什麼來禁用分頁。我是否應該將settings.API_LIMIT_PER_PAGE設置爲None,是否應將settings.API_MAX_LIMIT_PER_PAGE設置爲None,是否可以將某些內容寫入資源的Meta類中,以禁用限制等。對於不熟悉tastypie的基本機制的人來說,最初的拉取請求很容易寫出來,後續評論並沒有真正闡明。 – Alex 2013-04-05 15:05:27

回答

10

要做到這一點,你需要設置至少兩個不同的東西。

在站點設置文件,設置

API_LIMIT_PER_PAGE = 0 

在要禁用分頁資源元類,設置:

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

然後,如果你瀏覽到的列表視圖資源,返回的內容應顯示爲0的限制。

3

另一種解決方案是定義DummyPaginator類(最初在此處描述:https://github.com/toastdriven/django-tastypie/issues/777),其中sho ULD是tastypie的一部分(但不是很遺憾...):

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__函數 – 2013-06-04 10:16:41

+0

@GeorgeThomas - 更正,謝謝! – mnowotka 2013-06-04 11:19:49