web-dev-qa-db-ja.com

Djangoレストフィルターを使用してクエリ結果を制限する方法

私は_Django Rest Framework_で構築されたAPIに取り組んでいます。いくつかのmodelクラスを定義し、指定された_api-endpoints_で発生する特定のクエリに適用するフィルターもいくつか作成しました。

querysetにLIMITを適用しようとしていますが、Django notation ex Entry.objects.all()[:5]を使用したくないのですが、代わりに次のことができるようにしたいと思います。モデルに関連付けられたフィルターの内側から制限を適用します。

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

10
LetsPlayYahtzee

Django RestFrameworkページングを使用できます。pagination_classLimitOffsetPaginationを使用すると、query_paramで返されるエントリの数を制限できます。

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

6

django-restのページネーションAPIを使用する必要があります

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

limitオプションを見てください

1
Ward

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)

listapiviewまたはDRF設定でクラスをpagination_classとして設定します

1