2015-11-03 118 views
7

我正在使用Django Rest Framework構建的API。我已經定義了幾個model類,並且我還創建了一些過濾器以應用於在指定的api-endpoints中發生的某些查詢。如何用Django Rest過濾器限制查詢結果

我想在queryset中應用LIMIT,但我寧願不要 使用Django符號e.x. Entry.objects.all()[:5]。相反,我希望能夠應用與模型相關的過濾器內的限制。

直到現在我還沒有找到任何解決方案。我想我應該找到一種方法來定義一個默認值的過濾器,這會導致不限制查詢集,並且如果請求到達端點並且包含類似?filter=10那麼查詢集應該被限制爲前10個。

回答

3

您可以使用Django的REST框架分頁使用分頁API從Django的休息

http://www.django-rest-framework.org/api-guide/pagination/

的樣子。 pagination_class LimitOffsetPagination使您能夠限制query_param中返回條目的數量。

http://www.django-rest-framework.org/api-guide/pagination/

+0

這是非常接近我所需要的真的!雖然在這種情況下,我想重寫'LimitOffsetPagination'類併爲參數'offset'指定一個默認值(可能爲0),以便用戶只需指定'limit'參數。 我正在考慮使用'PageNumberPagination'並覆蓋'page_size_query_param'參數以具有默認值'limit'。這聽起來合理嗎? – LetsPlayYahtzee

+0

是的,這是一個很好的解決方案。如文檔中所述,參數「page_size_query_param」可用於允許客戶端控制請求頁面大小。在「PageNumberPagination'中,這個參數默認設置爲None。 –

+0

這可能聽起來很愚蠢,但我無法弄清楚放置自定義分頁類的位置。 – LetsPlayYahtzee

1

你應該在limit選項

1

可以擴展或自定義drf

class UserSpecificPagination(LimitOffsetPagination): 
     def get_limit(self, request): 
      if logic_met(request.user): 
      self.max_limit = custom_limit 
     return super(UserSpecificPagination, self).get_limit(request) 

設置類爲pagination_classlistapiview提供分頁類或DRF設置