From 7b55c297ab2ab14efa66b94855150db1d022c1c2 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Fri, 21 Oct 2016 16:46:40 +0100 Subject: [PATCH] Fix django-gaurdian-import --- rest_framework/compat.py | 1 - rest_framework/filters.py | 7 ++++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/rest_framework/compat.py b/rest_framework/compat.py index 2d6e7843c..b0e076203 100644 --- a/rest_framework/compat.py +++ b/rest_framework/compat.py @@ -207,7 +207,6 @@ guardian = None try: if 'guardian' in settings.INSTALLED_APPS: import guardian - import guardian.shortcuts # Fixes #1624 except ImportError: pass diff --git a/rest_framework/filters.py b/rest_framework/filters.py index f55297b39..47d9a0342 100644 --- a/rest_framework/filters.py +++ b/rest_framework/filters.py @@ -289,6 +289,11 @@ class DjangoObjectPermissionsFilter(BaseFilterBackend): perm_format = '%(app_label)s.view_%(model_name)s' def filter_queryset(self, request, queryset, view): + # We want to defer this import until run-time, rather than import-time. + # See https://github.com/tomchristie/django-rest-framework/issues/4608 + # (Also see #1624 for why we need to make this import explicitly) + from guardian.shortcuts import get_objects_for_user + extra = {} user = request.user model_cls = queryset.model @@ -302,4 +307,4 @@ class DjangoObjectPermissionsFilter(BaseFilterBackend): extra = {'accept_global_perms': False} else: extra = {} - return guardian.shortcuts.get_objects_for_user(user, permission, queryset, **extra) + return get_objects_for_user(user, permission, queryset, **extra)