2015-11-03 11 views
7

Django Rest Frameworkで構築されたAPIを使用しています。私はいくつかのクラスを定義しており、指定されたapi-endpointsで発生する特定のクエリに適用するフィルタもいくつか作成しました。Django Restフィルタでクエリ結果を制限する方法

私はquerysetにLIMITを適用しようとしていますが、 ではDjango表記e.xを使用しないことをお勧めします。 Entry.objects.all()[:5]。代わりに、モデルに関連付けられたフィルタの内側から制限を適用できるようにしたいと考えています。

これまでは解決策が見つかりませんでした。私は、クエリーセットを制限しない結果となるデフォルト値を持つフィルタを定義する方法を見つけるべきだと思っています。要求がエンドポイントに到達し、?filter=10のようなものを含んでいる場合、クエリーセットは最初の10に限定する必要があります。

答えて

3

あなたはDjangoの残りフレームワークページネーションを使用することができますでジャンゴ - 残り

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

見てからページネーションAPIを使用する必要があります。 pagination_class LimitOffsetPaginationは、query_paramで返されるエントリの数を制限する機能を提供します。あなたは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) 

で利用できるページネーションクラスを拡張したりカスタマイズすることができ

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

listapiviewpagination_classとしてクラスを設定したり、DRFは、私が本当に必要なものに非常に近いこと

関連する問題