diff options
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): |
