Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 450aa5c

Browse files
SafaAlfulaijsliverc
andauthored
Allow get_serializer_class to be overwritten for related urls without defining serializer_class fallback (#904)
Co-authored-by: Oliver Sauder <os@esite.ch>
1 parent 51daed1 commit 450aa5c

File tree

4 files changed

+15
-14
lines changed

4 files changed

+15
-14
lines changed

‎CHANGELOG.md‎

Lines changed: 4 additions & 0 deletions
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‎

Lines changed: 3 additions & 4 deletions
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‎

Lines changed: 7 additions & 9 deletions
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‎

Lines changed: 1 addition & 1 deletion
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)

AltStyle によって変換されたページ (->オリジナル) /