diff --git a/mayan/apps/acls/managers.py b/mayan/apps/acls/managers.py index 1f2173f4a9..e5c24475ad 100644 --- a/mayan/apps/acls/managers.py +++ b/mayan/apps/acls/managers.py @@ -8,7 +8,7 @@ from django.db import models from django.db.models import Q from django.utils.translation import ugettext, ugettext_lazy as _ -from common.utils import return_attrib +from common.utils import return_attrib, return_related from permissions import Permission from permissions.models import StoredPermission @@ -115,7 +115,7 @@ class AccessControlListManager(models.Manager): else: instance = queryset.first() if instance: - parent_object = getattr(instance, parent_accessor) + parent_object = return_related(instance, parent_accessor) try: # Try to see if parent_object is a function diff --git a/mayan/apps/common/utils.py b/mayan/apps/common/utils.py index faf4b2af39..752df8a12e 100644 --- a/mayan/apps/common/utils.py +++ b/mayan/apps/common/utils.py @@ -149,6 +149,15 @@ def return_attrib(obj, attrib, arguments=None): return force_text(exception) +def return_related(instance, attribute): + """ + This functions works in a similar method to return_attrib but is + meant for related models. Support multiple levels of relationship + using double underscore. + """ + return reduce_function(getattr, attribute.split('__'), instance) + + def urlquote(link=None, get=None): """ This method does both: urlquote() and urlencode()