我目前有一个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':'page'
}
当我向API发出请求时:/ api / weather / observation /?station = 2& page = 2& min_date = 2013-3-14我只收到两个结果。如果是第3页,3结果,依此类推。有没有什么我做错了导致这个问题?
干杯。
答案 0 :(得分:4)
查看the docs这些设置:
PAGINATE_BY_PARAM
查询参数的名称,客户端可以使用该名称来覆盖用于分页的默认页面大小。如果设置为“无”,则客户端可能不会覆盖默认页面大小。
只需从settings.py中删除该行,就可以了。
更新2016年1月7日:
请注意,此设置现在处于弃用状态。有关详细信息,请参阅pagination guide。
简短版本是您现在应该使用适当的设置创建自定义分页类,然后将其应用于视图。链接指南中的示例应该非常有用。
答案 1 :(得分:2)
不确定这样做会有多大帮助,但是我需要在使用过滤器的项目中对单个视图进行分页。我所做的是
class GlobalFilter(CustomMixin):
from rest_framework.pagination import PageNumberPagination
queryset = Data.objects.all()
filter_backends = [DjangoFilterBackend]
serializer_class = FilterSerializer
filterset_class = GlobalFilterSet
pagination_class = PageNumberPagination
pagination_class.page_size = 100
也许对其他人有帮助:)
答案 2 :(得分:0)
使用filter-and-pagination插件。处理过滤和分页功能是否很好
pip install filter-and-pagination