diff --git a/pylint_django/transforms/foreignkey.py b/pylint_django/transforms/foreignkey.py index 849a2938..4d4eac12 100644 --- a/pylint_django/transforms/foreignkey.py +++ b/pylint_django/transforms/foreignkey.py @@ -1,11 +1,8 @@ from itertools import chain -from astroid import ( - MANAGER, nodes, InferenceError, inference_tip, - UseInferenceDefault -) -from astroid.nodes import ClassDef, Attribute - +from astroid import (MANAGER, InferenceError, UseInferenceDefault, exceptions, + inference_tip, nodes) +from astroid.nodes import Attribute, ClassDef from pylint_django.utils import node_is_subclass @@ -92,8 +89,19 @@ def infer_key_classes(node, context=None): # comparison below module_name += '.models' # ensure that module is loaded in astroid_cache, for cases when models is a package - if module_name not in MANAGER.astroid_cache: - MANAGER.ast_from_module_name(module_name) + for prefix in ['', 'oscar.apps.', 'django.contrib.']: + try: + if prefix + module_name not in MANAGER.astroid_cache: + MANAGER.ast_from_module_name(prefix + module_name) + except exceptions.AstroidImportError: + continue + else: + # We've imported without a crash! + module_name = prefix + module_name + break + else: + # We've exhausted the prefixes + raise ImportError(f'Could not import {module_name}') # create list from dict_values, because it may be modified in a loop for module in list(MANAGER.astroid_cache.values()):