From e3d400c70db72c436835504be4d7296a64dbcf3f Mon Sep 17 00:00:00 2001 From: Michael Price Date: Thu, 1 Mar 2018 18:30:27 -0400 Subject: [PATCH] Add common.utils.return_related function to support double underscore related model references. Signed-off-by: Michael Price --- mayan/apps/acls/managers.py | 4 ++-- mayan/apps/common/utils.py | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) 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()