aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework
diff options
context:
space:
mode:
Diffstat (limited to 'rest_framework')
-rw-r--r--rest_framework/fields.py11
-rw-r--r--rest_framework/utils/field_mapping.py2
2 files changed, 6 insertions, 7 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
diff --git a/rest_framework/utils/field_mapping.py b/rest_framework/utils/field_mapping.py
index 86ceff31..fca97b4b 100644
--- a/rest_framework/utils/field_mapping.py
+++ b/rest_framework/utils/field_mapping.py
@@ -59,7 +59,7 @@ def get_field_kwargs(field_name, model_field):
Creates a default instance of a basic non-relational field.
"""
kwargs = {}
- validator_kwarg = model_field.validators
+ validator_kwarg = list(model_field.validators)
# The following will only be used by ModelField classes.
# Gets removed for everything else.