diff options
| author | Sean C. Farley | 2012-06-26 19:27:57 -0400 |
|---|---|---|
| committer | Sean C. Farley | 2012-06-26 19:27:57 -0400 |
| commit | 1b49c5e3e5c1b33d8d4c2dcaaaf6cb4dcbffa814 (patch) | |
| tree | 40454f839a72af373b930ee9a00950e33d359c10 /djangorestframework | |
| parent | 9dbaac3182aa8e5c322e25513cd2e3d2bf0af1e2 (diff) | |
| download | django-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.
Diffstat (limited to 'djangorestframework')
| -rw-r--r-- | djangorestframework/serializer.py | 9 |
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) |
