aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSean C. Farley2012-06-26 19:27:57 -0400
committerSean C. Farley2012-06-26 19:27:57 -0400
commit1b49c5e3e5c1b33d8d4c2dcaaaf6cb4dcbffa814 (patch)
tree40454f839a72af373b930ee9a00950e33d359c10
parent9dbaac3182aa8e5c322e25513cd2e3d2bf0af1e2 (diff)
downloaddjango-rest-framework-1b49c5e3e5c1b33d8d4c2dcaaaf6cb4dcbffa814.tar.bz2
Pass request to related serializers
Related serializers may need access to the request to properly serialize a child resource. For example, reverse() in djangorestframework.reverse uses request if available to return an absolute URL. While the parent resource has access to the request to generate the absolute URL, the child resource does not.
-rw-r--r--djangorestframework/serializer.py9
1 files changed, 7 insertions, 2 deletions
diff --git a/djangorestframework/serializer.py b/djangorestframework/serializer.py
index 9481eeff..ffe9d8cb 100644
--- a/djangorestframework/serializer.py
+++ b/djangorestframework/serializer.py
@@ -179,7 +179,8 @@ class Serializer(object):
stack = self.stack[:]
stack.append(obj)
- return related_serializer(depth=depth, stack=stack).serialize(obj)
+ return related_serializer(depth=depth, stack=stack).serialize(
+ obj, request=self.request)
def serialize_max_depth(self, obj):
"""
@@ -253,11 +254,15 @@ class Serializer(object):
"""
return smart_unicode(obj, strings_only=True)
- def serialize(self, obj):
+ def serialize(self, obj, request=None):
"""
Convert any object into a serializable representation.
"""
+ # Request from related serializer.
+ if request is not None:
+ self.request = request
+
if isinstance(obj, (dict, models.Model)):
# Model instances & dictionaries
return self.serialize_model(obj)