diff options
| author | Tom Christie | 2012-11-16 22:45:57 +0000 | 
|---|---|---|
| committer | Tom Christie | 2012-11-16 22:45:57 +0000 | 
| commit | 31f01bd6315f46bf28bb4c9c25a5298785fc4fc6 (patch) | |
| tree | 8f2c0ef593402a23118d71c7f81734c30ef5d2cc /rest_framework/generics.py | |
| parent | 9973cf329a2133a900256b53236348ef3c870842 (diff) | |
| download | django-rest-framework-31f01bd6315f46bf28bb4c9c25a5298785fc4fc6.tar.bz2 | |
Polishing to page size query parameters & more docs
Diffstat (limited to 'rest_framework/generics.py')
| -rw-r--r-- | rest_framework/generics.py | 32 | 
1 files changed, 24 insertions, 8 deletions
| diff --git a/rest_framework/generics.py b/rest_framework/generics.py index 9ad03f71..dcf4dfd9 100644 --- a/rest_framework/generics.py +++ b/rest_framework/generics.py @@ -14,6 +14,7 @@ class GenericAPIView(views.APIView):      """      Base class for all other generic views.      """ +    model = None      serializer_class = None      model_serializer_class = api_settings.DEFAULT_MODEL_SERIALIZER_CLASS @@ -30,8 +31,10 @@ class GenericAPIView(views.APIView):      def get_serializer_class(self):          """          Return the class to use for the serializer. -        Use `self.serializer_class`, falling back to constructing a -        model serializer class from `self.model_serializer_class` + +        Defaults to using `self.serializer_class`, falls back to constructing a +        model serializer class using `self.model_serializer_class`, with +        `self.model` as the model.          """          serializer_class = self.serializer_class @@ -58,29 +61,42 @@ class MultipleObjectAPIView(MultipleObjectMixin, GenericAPIView):      pagination_serializer_class = api_settings.DEFAULT_PAGINATION_SERIALIZER_CLASS      paginate_by = api_settings.PAGINATE_BY +    paginate_by_param = api_settings.PAGINATE_BY_PARAM      filter_backend = api_settings.FILTER_BACKEND      def filter_queryset(self, queryset): +        """ +        Given a queryset, filter it with whichever filter backend is in use. +        """          if not self.filter_backend:              return queryset          backend = self.filter_backend()          return backend.filter_queryset(self.request, queryset, self) -    def get_pagination_serializer_class(self): +    def get_pagination_serializer(self, page=None):          """ -        Return the class to use for the pagination serializer. +        Return a serializer instance to use with paginated data.          """          class SerializerClass(self.pagination_serializer_class):              class Meta:                  object_serializer_class = self.get_serializer_class() -        return SerializerClass - -    def get_pagination_serializer(self, page=None): -        pagination_serializer_class = self.get_pagination_serializer_class() +        pagination_serializer_class = SerializerClass          context = self.get_serializer_context()          return pagination_serializer_class(instance=page, context=context) +    def get_paginate_by(self, queryset): +        """ +        Return the size of pages to use with pagination. +        """ +        if self.paginate_by_param: +            params = self.request.QUERY_PARAMS +            try: +                return int(params[self.paginate_by_param]) +            except (KeyError, ValueError): +                pass +        return self.paginate_by +  class SingleObjectAPIView(SingleObjectMixin, GenericAPIView):      """ | 
