From fa788865819bc5e4a0a31e130be4aa3398fe426f Mon Sep 17 00:00:00 2001 From: MohamadReza Taalebi <33086212+mrtaalebi@users.noreply.github.com> Date: Mon, 27 Jan 2020 15:36:29 +0330 Subject: [PATCH 1/4] Update generics.py Fix GenericAPIView.get_serializer(self, *args, **kwargs) ignores context in kwargs and replaces it (which may be used by views) with its default context --- rest_framework/generics.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/rest_framework/generics.py b/rest_framework/generics.py index c39b02ab7f..25b26c30f6 100644 --- a/rest_framework/generics.py +++ b/rest_framework/generics.py @@ -106,7 +106,14 @@ def get_serializer(self, *args, **kwargs): deserializing input, and for serializing output. """ serializer_class = self.get_serializer_class() - kwargs['context'] = self.get_serializer_context() + + # Include view's costum context + default_context = self.get_serializer_context() + if 'context' in kwargs: + kwargs['context'].update(default_context) + else: + kwargs['context'] = default_context + return serializer_class(*args, **kwargs) def get_serializer_class(self): From 4602333f6e188a8abd391347cd9fed4000e3a841 Mon Sep 17 00:00:00 2001 From: MohamadReza Taalebi <33086212+mrtaalebi@users.noreply.github.com> Date: Mon, 27 Jan 2020 15:40:25 +0330 Subject: [PATCH 2/4] Fix typo Change Costum to Custom --- rest_framework/generics.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rest_framework/generics.py b/rest_framework/generics.py index 25b26c30f6..493bd2b457 100644 --- a/rest_framework/generics.py +++ b/rest_framework/generics.py @@ -107,7 +107,7 @@ def get_serializer(self, *args, **kwargs): """ serializer_class = self.get_serializer_class() - # Include view's costum context + # Include view's custom context default_context = self.get_serializer_context() if 'context' in kwargs: kwargs['context'].update(default_context) From ad99b8e2531cbd8fb7c17ad7460da4aa43c8160b Mon Sep 17 00:00:00 2001 From: MohamadReza Taalebi <33086212+mrtaalebi@users.noreply.github.com> Date: Tue, 28 Jan 2020 03:38:31 +0330 Subject: [PATCH 3/4] Assert context not in kwargs Raise and AssertionError whenever a `context` argument is passed to the `get_serializer` --- rest_framework/generics.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/rest_framework/generics.py b/rest_framework/generics.py index 493bd2b457..a2b13b6cfa 100644 --- a/rest_framework/generics.py +++ b/rest_framework/generics.py @@ -106,14 +106,13 @@ def get_serializer(self, *args, **kwargs): deserializing input, and for serializing output. """ serializer_class = self.get_serializer_class() - - # Include view's custom context - default_context = self.get_serializer_context() - if 'context' in kwargs: - kwargs['context'].update(default_context) - else: - kwargs['context'] = default_context - + + assert 'context' not in kwargs, ( + "`get_serializer` does not accept a `context` argument, " + "you may override `get_serializer_context` instead." + ) + kwargs['context'] = self.get_serializer_context() + return serializer_class(*args, **kwargs) def get_serializer_class(self): From aa9b55f88e81acafcc16f5271e57f3af63862350 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Wed, 13 May 2020 11:15:25 +0100 Subject: [PATCH 4/4] Update generics.py --- rest_framework/generics.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/rest_framework/generics.py b/rest_framework/generics.py index a2b13b6cfa..998d33dd1d 100644 --- a/rest_framework/generics.py +++ b/rest_framework/generics.py @@ -107,11 +107,7 @@ def get_serializer(self, *args, **kwargs): """ serializer_class = self.get_serializer_class() - assert 'context' not in kwargs, ( - "`get_serializer` does not accept a `context` argument, " - "you may override `get_serializer_context` instead." - ) - kwargs['context'] = self.get_serializer_context() + kwargs.setdefault('context', self.get_serializer_context()) return serializer_class(*args, **kwargs)