aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/generics.py
diff options
context:
space:
mode:
authorTom Christie2012-09-30 17:31:28 +0100
committerTom Christie2012-09-30 17:31:28 +0100
commit6fa589fefd48d98e4f0a11548b6c3e5ced58e31e (patch)
treea5d1dd75ce6d5c5be7bf81b386a29c13235d33ff /rest_framework/generics.py
parent43d3634e892e303ca377265d3176e8313f19563f (diff)
downloaddjango-rest-framework-6fa589fefd48d98e4f0a11548b6c3e5ced58e31e.tar.bz2
Pagination support
Diffstat (limited to 'rest_framework/generics.py')
-rw-r--r--rest_framework/generics.py31
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):