diff options
Diffstat (limited to 'rest_framework/serializers.py')
| -rw-r--r-- | rest_framework/serializers.py | 11 | 
1 files changed, 10 insertions, 1 deletions
diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index e63f4783..67eafdf0 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -22,7 +22,16 @@ class DictWithMetadata(dict):      """      A dict-like object, that can have additional properties attached.      """ -    pass +    def __getstate__(self): +        """ +        Used by pickle (e.g., caching). +        Overriden to remove metadata from the dict, since it shouldn't be pickled +        and may in some instances be unpickleable. +        """ +        # return an instance of the first dict in MRO that isn't a DictWithMetadata +        for base in self.__class__.__mro__: +            if not isinstance(base, DictWithMetadata) and isinstance(base, dict): +                return base(self)  class SortedDictWithMetadata(SortedDict, DictWithMetadata):  | 
