check instance __getitem__ value first

This commit is contained in:
Catstyle 2014-12-09 18:56:52 +08:00
parent d7d399f8b6
commit 4d433b6513

View File

@ -59,14 +59,16 @@ def get_attribute(instance, attrs):
if instance is None:
# Break out early if we get `None` at any point in a nested lookup.
return None
if getattr(instance, '__getitem__', None):
try:
return instance[attr]
except (KeyError, TypeError, AttributeError):
pass
try:
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()