Skip to content

Commit ff191c8

Browse files
committed
This attempt to fix the issues breaks tests
An attempt to fix django-json-api#859, which unfortunately breaks two tests in test_views.
1 parent c392a43 commit ff191c8

File tree

2 files changed

+18
-9
lines changed

2 files changed

+18
-9
lines changed

example/tests/test_views.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -367,32 +367,32 @@ def test_get_related_instance_model_field(self):
367367
got = view.get_related_instance()
368368
self.assertEqual(got, self.author.id)
369369

370-
def test_get_serializer_class(self):
370+
def test_get_related_serializer_class(self):
371371
kwargs = {'pk': self.author.id, 'related_field': 'bio'}
372372
view = self._get_view(kwargs)
373-
got = view.get_serializer_class()
373+
got = view.get_related_serializer_class()
374374
self.assertEqual(got, AuthorBioSerializer)
375375

376-
def test_get_serializer_class_many(self):
376+
def test_get_related_serializer_class_many(self):
377377
kwargs = {'pk': self.author.id, 'related_field': 'entries'}
378378
view = self._get_view(kwargs)
379-
got = view.get_serializer_class()
379+
got = view.get_related_serializer_class()
380380
self.assertEqual(got, EntrySerializer)
381381

382382
def test_get_serializer_comes_from_included_serializers(self):
383383
kwargs = {'pk': self.author.id, 'related_field': 'type'}
384384
view = self._get_view(kwargs)
385385
related_serializers = view.serializer_class.related_serializers
386386
delattr(view.serializer_class, 'related_serializers')
387-
got = view.get_serializer_class()
387+
got = view.get_related_serializer_class()
388388
self.assertEqual(got, AuthorTypeSerializer)
389389

390390
view.serializer_class.related_serializers = related_serializers
391391

392-
def test_get_serializer_class_raises_error(self):
392+
def test_get_related_serializer_class_raises_error(self):
393393
kwargs = {'pk': self.author.id, 'related_field': 'unknown'}
394394
view = self._get_view(kwargs)
395-
self.assertRaises(NotFound, view.get_serializer_class)
395+
self.assertRaises(NotFound, view.get_related_serializer_class)
396396

397397
def test_retrieve_related_single_reverse_lookup(self):
398398
url = reverse('author-related', kwargs={'pk': self.author.pk, 'related_field': 'bio'})

rest_framework_json_api/views.py

+11-2
Original file line numberDiff line numberDiff line change
@@ -144,10 +144,19 @@ def retrieve_related(self, request, *args, **kwargs):
144144
if isinstance(instance, Iterable):
145145
serializer_kwargs['many'] = True
146146

147-
serializer = self.get_serializer(instance, **serializer_kwargs)
147+
serializer = self.get_related_serializer(instance, **serializer_kwargs)
148148
return Response(serializer.data)
149149

150-
def get_serializer_class(self):
150+
def get_related_serializer(self, *args, **kwargs):
151+
"""
152+
Return the serializer instance that should be used for validating and
153+
deserializing input, and for serializing output.
154+
"""
155+
serializer_class = self.get_related_serializer_class()
156+
kwargs.setdefault('context', self.get_serializer_context())
157+
return serializer_class(*args, **kwargs)
158+
159+
def get_related_serializer_class(self):
151160
parent_serializer_class = super(RelatedMixin, self).get_serializer_class()
152161

153162
if 'related_field' in self.kwargs:

0 commit comments

Comments
 (0)