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.
This commit is contained in:
Sean C. Farley 2012-06-26 19:27:57 -04:00
parent 9dbaac3182
commit 1b49c5e3e5

View File

@ -179,7 +179,8 @@ class Serializer(object):
stack = self.stack[:] stack = self.stack[:]
stack.append(obj) 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): def serialize_max_depth(self, obj):
""" """
@ -253,11 +254,15 @@ class Serializer(object):
""" """
return smart_unicode(obj, strings_only=True) return smart_unicode(obj, strings_only=True)
def serialize(self, obj): def serialize(self, obj, request=None):
""" """
Convert any object into a serializable representation. 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)): if isinstance(obj, (dict, models.Model)):
# Model instances & dictionaries # Model instances & dictionaries
return self.serialize_model(obj) return self.serialize_model(obj)