diff --git a/rest_framework/compat.py b/rest_framework/compat.py index dd30636f4..3125208b0 100644 --- a/rest_framework/compat.py +++ b/rest_framework/compat.py @@ -123,6 +123,8 @@ def get_related_model(field): def value_from_object(field, obj): + if isinstance(obj, dict): + return obj[field.attname] if django.VERSION < (1, 9): return field._get_val_from_obj(obj) field.value_from_object(obj) diff --git a/rest_framework/fields.py b/rest_framework/fields.py index aaf9ef14f..c77a7707a 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -1227,6 +1227,8 @@ class DurationField(Field): self.fail('invalid', format='[DD] [HH:[MM:]]ss[.uuuuuu]') def to_representation(self, value): + if isinstance(value, six.string_types): + return value return duration_string(value) @@ -1686,4 +1688,6 @@ class ModelField(Field): value = value_from_object(self.model_field, obj) if is_protected_type(value): return value + if isinstance(obj, dict): + return obj[self.model_field.attname] return self.model_field.value_to_string(obj)