mirror of
https://github.com/encode/django-rest-framework.git
synced 2024-11-27 20:14:01 +03:00
Merge pull request #181 from flashingpumpkin/master
Maintain a reference to the parent/root serializer
This commit is contained in:
commit
db7d15d5d1
|
@ -169,6 +169,7 @@ class FormResource(Resource):
|
||||||
)
|
)
|
||||||
|
|
||||||
# Add any unknown field errors
|
# Add any unknown field errors
|
||||||
|
if not self.allow_unknown_form_fields:
|
||||||
for key in unknown_fields:
|
for key in unknown_fields:
|
||||||
field_errors[key] = [u'This field does not exist.']
|
field_errors[key] = [u'This field does not exist.']
|
||||||
|
|
||||||
|
|
|
@ -97,6 +97,11 @@ class Serializer(object):
|
||||||
The maximum depth to serialize to, or `None`.
|
The maximum depth to serialize to, or `None`.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
parent = None
|
||||||
|
"""
|
||||||
|
A reference to the root serializer when descending down into fields.
|
||||||
|
"""
|
||||||
|
|
||||||
def __init__(self, depth=None, stack=[], **kwargs):
|
def __init__(self, depth=None, stack=[], **kwargs):
|
||||||
if depth is not None:
|
if depth is not None:
|
||||||
self.depth = depth
|
self.depth = depth
|
||||||
|
@ -130,9 +135,12 @@ class Serializer(object):
|
||||||
# If an element in `fields` is a 2-tuple of (str, tuple)
|
# If an element in `fields` is a 2-tuple of (str, tuple)
|
||||||
# then the second element of the tuple is the fields to
|
# then the second element of the tuple is the fields to
|
||||||
# set on the related serializer
|
# set on the related serializer
|
||||||
if isinstance(info, (list, tuple)):
|
|
||||||
class OnTheFlySerializer(self.__class__):
|
class OnTheFlySerializer(self.__class__):
|
||||||
fields = info
|
fields = info
|
||||||
|
parent = getattr(self, 'parent') or self
|
||||||
|
|
||||||
|
if isinstance(info, (list, tuple)):
|
||||||
return OnTheFlySerializer
|
return OnTheFlySerializer
|
||||||
|
|
||||||
# If an element in `fields` is a 2-tuple of (str, Serializer)
|
# If an element in `fields` is a 2-tuple of (str, Serializer)
|
||||||
|
@ -150,8 +158,9 @@ class Serializer(object):
|
||||||
elif isinstance(info, str) and info in _serializers:
|
elif isinstance(info, str) and info in _serializers:
|
||||||
return _serializers[info]
|
return _serializers[info]
|
||||||
|
|
||||||
# Otherwise use `related_serializer` or fall back to `Serializer`
|
# Otherwise use `related_serializer` or fall back to
|
||||||
return getattr(self, 'related_serializer') or Serializer
|
# `OnTheFlySerializer` preserve custom serialization methods.
|
||||||
|
return getattr(self, 'related_serializer') or OnTheFlySerializer
|
||||||
|
|
||||||
def serialize_key(self, key):
|
def serialize_key(self, key):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue
Block a user