context to custom field in pagination

This commit is contained in:
Szymon Teżewski 2012-12-13 12:07:56 +01:00
parent 497da7fc69
commit 5f08ec70e2
2 changed files with 31 additions and 2 deletions

View File

@ -62,7 +62,7 @@ class BasePaginationSerializer(serializers.Serializer):
super(BasePaginationSerializer, self).__init__(*args, **kwargs) super(BasePaginationSerializer, self).__init__(*args, **kwargs)
results_field = self.results_field results_field = self.results_field
object_serializer = self.opts.object_serializer_class object_serializer = self.opts.object_serializer_class
self.fields[results_field] = object_serializer(source='object_list') self.fields[results_field] = object_serializer(source='object_list', **kwargs)
def to_native(self, obj): def to_native(self, obj):
""" """

View File

@ -4,7 +4,7 @@ from django.core.paginator import Paginator
from django.test import TestCase from django.test import TestCase
from django.test.client import RequestFactory from django.test.client import RequestFactory
from django.utils import unittest from django.utils import unittest
from rest_framework import generics, status, pagination, filters from rest_framework import generics, status, pagination, filters, serializers
from rest_framework.compat import django_filters from rest_framework.compat import django_filters
from rest_framework.tests.models import BasicModel, FilterableItem from rest_framework.tests.models import BasicModel, FilterableItem
@ -236,3 +236,32 @@ class TestCustomPaginateByParam(TestCase):
response = self.view(request).render() response = self.view(request).render()
self.assertEquals(response.data['count'], 13) self.assertEquals(response.data['count'], 13)
self.assertEquals(response.data['results'], self.data[:5]) self.assertEquals(response.data['results'], self.data[:5])
class CustomField(serializers.Field):
def to_native(self, value):
if not 'view' in self.context:
raise RuntimeError("context isn't getting passed into custom field")
return "value"
class BasicModelSerializer(serializers.Serializer):
text = CustomField()
class TestContextPassedToCustomField(TestCase):
def setUp(self):
BasicModel.objects.create(text='ala ma kota')
def test_with_pagination(self):
class ListView(generics.ListCreateAPIView):
model = BasicModel
serializer_class = BasicModelSerializer
paginate_by = 1
self.view = ListView.as_view()
request = factory.get('/')
response = self.view(request).render()
self.assertEquals(response.status_code, status.HTTP_200_OK)