2013-03-15 19 views
6

Djangoの残りの枠組みの中でフィルタをページ付けする方法:は、次のように私は現在、APIのビューを設定している

class WeatherObservationSerializer(serializers.ModelSerializer): 
    dew_point = serializers.Field(source='dew_point') 
    wind_gust = serializers.Field(source='get_wind_gust') 

    class Meta: 
     model = WeatherObservation 
     fields = ('id', 'station', 'temperature', 'pressure', 'humidity', 
        'wind_direction', 'wind_speed', 'rainfall', 'date', 
        'dew_point', 'wind_gust') 

class WeatherObservationList(generics.ListCreateAPIView): 
    model = WeatherObservation 
    serializer_class = WeatherObservationSerializer 
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,) 

    def get_queryset(self): 
     queryset = WeatherObservation.objects.all() 
     min_date = self.request.QUERY_PARAMS.get('min_date', None) 
     station = self.request.QUERY_PARAMS.get('station', None) 
     if min_date is not None: 
      queryset = queryset.filter(date__gte=min_date) 
     if station is not None: 
      queryset = queryset.filter(station=station) 
     return queryset 

マイsettings.pyは含まれています REST_FRAMEWORK = { 'PAGINATE_BY':50、 'PAGINATE_BY_PARAMを': 'ページの」 }

私のようなAPIにリクエストを作るので、:/ API /天気/観測/駅= 2 &ページ= 2 & MIN_DATE = 2013年3月14日私は戻って二つの結果を得ます?。 3ページ目の場合は3、その他の場合は3の結果となります。この問題を引き起こしている間違ったことは何ですか?

乾杯。

答えて

3

それらの設定のためのthe docsをチェックアウト:

PAGINATE_BY_PARAM

ページ付けのために使用するデフォルトのページサイズをオーバライドするためにクライアントが使用可能なクエリパラメータの名前。 Noneに設定すると、クライアントはデフォルトのページサイズを上書きしないことがあります。

あなたのsettings.pyからその行を削除するだけで問題ありません。

UPDATE 2016年1月7日:

(注)この設定は廃止のプロセスに今あること。詳細については、pagination guideを参照してください。

短いバージョンでは、適切な設定でカスタムページネーションクラスを作成してから、ビューに適用する必要があります。リンクされたガイドの例は役立つ以上のものでなければなりません。

+0

ハハ、facepalm。私はページ番号付けに使うパラメータの名前だと思っていました。ありがとう! – slurms

+0

ええ、それはむしろ不十分な名前です。お役に立てて嬉しいです! – Hamms

関連する問題