aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework
diff options
context:
space:
mode:
Diffstat (limited to 'rest_framework')
-rw-r--r--rest_framework/fields.py11
1 files changed, 5 insertions, 6 deletions
diff --git a/rest_framework/fields.py b/rest_framework/fields.py
index 99498da7..15e59861 100644
--- a/rest_framework/fields.py
+++ b/rest_framework/fields.py
@@ -15,6 +15,7 @@ from rest_framework.compat import (
from rest_framework.exceptions import ValidationError
from rest_framework.settings import api_settings
from rest_framework.utils import html, representation, humanize_datetime
+import collections
import copy
import datetime
import decimal
@@ -60,14 +61,12 @@ def get_attribute(instance, attrs):
# Break out early if we get `None` at any point in a nested lookup.
return None
try:
- instance = getattr(instance, attr)
+ if isinstance(instance, collections.Mapping):
+ instance = instance[attr]
+ else:
+ instance = getattr(instance, attr)
except ObjectDoesNotExist:
return None
- except AttributeError as exc:
- try:
- return instance[attr]
- except (KeyError, TypeError, AttributeError):
- raise exc
if is_simple_callable(instance):
instance = instance()
return instance