Skip to content

Commit 450aa5c

Browse files
Allow get_serializer_class to be overwritten for related urls without defining serializer_class fallback (#904)
Co-authored-by: Oliver Sauder <[email protected]>
1 parent 51daed1 commit 450aa5c

File tree

4 files changed

+15
-14
lines changed

4 files changed

+15
-14
lines changed

CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ any parts of the framework not mentioned in the documentation should generally b
1414

1515
* Added support for Django 3.2.
1616

17+
### Fixed
18+
19+
* Allow `get_serializer_class` to be overwritten when using related urls without defining `serializer_class` fallback
20+
1721
## [4.1.0] - 2021-03-08
1822

1923
### Added

example/tests/test_views.py

+3-4
Original file line numberDiff line numberDiff line change
@@ -417,12 +417,11 @@ def test_get_related_serializer_class_many(self):
417417
def test_get_serializer_comes_from_included_serializers(self):
418418
kwargs = {"pk": self.author.id, "related_field": "type"}
419419
view = self._get_view(kwargs)
420-
related_serializers = view.serializer_class.related_serializers
421-
delattr(view.serializer_class, "related_serializers")
420+
related_serializers = view.get_serializer_class().related_serializers
421+
delattr(view.get_serializer_class(), "related_serializers")
422422
got = view.get_related_serializer_class()
423423
self.assertEqual(got, AuthorTypeSerializer)
424-
425-
view.serializer_class.related_serializers = related_serializers
424+
view.get_serializer_class().related_serializers = related_serializers
426425

427426
def test_get_related_serializer_class_raises_error(self):
428427
kwargs = {"pk": self.author.id, "related_field": "unknown"}

example/views.py

+7-9
Original file line numberDiff line numberDiff line change
@@ -208,17 +208,15 @@ class NoFiltersetEntryViewSet(EntryViewSet):
208208

209209
class AuthorViewSet(ModelViewSet):
210210
queryset = Author.objects.all()
211-
serializer_classes = {
212-
"list": AuthorListSerializer,
213-
"retrieve": AuthorDetailSerializer,
214-
}
215-
serializer_class = AuthorSerializer # fallback
216211

217212
def get_serializer_class(self):
218-
try:
219-
return self.serializer_classes.get(self.action, self.serializer_class)
220-
except AttributeError:
221-
return self.serializer_class
213+
serializer_classes = {
214+
"list": AuthorListSerializer,
215+
"retrieve": AuthorDetailSerializer,
216+
}
217+
218+
action = getattr(self, "action", "")
219+
return serializer_classes.get(action, AuthorSerializer)
222220

223221

224222
class CommentViewSet(ModelViewSet):

rest_framework_json_api/views.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ def get_related_serializer(self, instance, **kwargs):
154154
return serializer_class(instance, **kwargs)
155155

156156
def get_related_serializer_class(self):
157-
parent_serializer_class = super(RelatedMixin, self).get_serializer_class()
157+
parent_serializer_class = self.get_serializer_class()
158158

159159
if "related_field" in self.kwargs:
160160
field_name = self.kwargs["related_field"]

0 commit comments

Comments
 (0)