diff options
| author | Tom Christie | 2012-09-30 17:31:28 +0100 | 
|---|---|---|
| committer | Tom Christie | 2012-09-30 17:31:28 +0100 | 
| commit | 6fa589fefd48d98e4f0a11548b6c3e5ced58e31e (patch) | |
| tree | a5d1dd75ce6d5c5be7bf81b386a29c13235d33ff /rest_framework/generics.py | |
| parent | 43d3634e892e303ca377265d3176e8313f19563f (diff) | |
| download | django-rest-framework-6fa589fefd48d98e4f0a11548b6c3e5ced58e31e.tar.bz2 | |
Pagination support
Diffstat (limited to 'rest_framework/generics.py')
| -rw-r--r-- | rest_framework/generics.py | 31 | 
1 files changed, 23 insertions, 8 deletions
diff --git a/rest_framework/generics.py b/rest_framework/generics.py index 4240e33e..1e547b32 100644 --- a/rest_framework/generics.py +++ b/rest_framework/generics.py @@ -2,7 +2,8 @@  Generic views that provide commmonly needed behaviour.  """ -from rest_framework import views, mixins, serializers +from rest_framework import views, mixins +from rest_framework.settings import api_settings  from django.views.generic.detail import SingleObjectMixin  from django.views.generic.list import MultipleObjectMixin @@ -14,23 +15,37 @@ class BaseView(views.APIView):      Base class for all other generic views.      """      serializer_class = None +    model_serializer_class = api_settings.MODEL_SERIALIZER +    pagination_serializer_class = api_settings.PAGINATION_SERIALIZER +    paginate_by = api_settings.PAGINATE_BY -    def get_serializer(self, data=None, files=None, instance=None): +    def get_serializer_context(self): +        return { +            'request': self.request, +            'format': self.kwargs.get('format', None) +        } + +    def get_serializer(self, data=None, files=None, instance=None, kwargs=None):          # TODO: add support for files          # TODO: add support for seperate serializer/deserializer          serializer_class = self.serializer_class +        kwargs = kwargs or {}          if serializer_class is None: -            class DefaultSerializer(serializers.ModelSerializer): +            class DefaultSerializer(self.model_serializer_class):                  class Meta:                      model = self.model              serializer_class = DefaultSerializer -        context = { -            'request': self.request, -            'format': self.kwargs.get('format', None) -        } -        return serializer_class(data, instance=instance, context=context) +        context = self.get_serializer_context() +        return serializer_class(data, instance=instance, context=context, **kwargs) + +    def get_pagination_serializer(self, page=None): +        serializer_class = self.pagination_serializer_class +        context = self.get_serializer_context() +        ret = serializer_class(instance=page, context=context) +        ret.fields['results'] = self.get_serializer(kwargs={'source': 'object_list'}) +        return ret  class MultipleObjectBaseView(MultipleObjectMixin, BaseView):  | 
