diff --git a/django/db/migrations/loader.py b/django/db/migrations/loader.py index bbbde07a98..be39b09e26 100644 --- a/django/db/migrations/loader.py +++ b/django/db/migrations/loader.py @@ -89,8 +89,9 @@ class MigrationLoader(object): continue raise else: - # PY3 will happily import empty dirs as namespaces. - if not hasattr(module, '__file__'): + # Empty directories are namespaces. + # getattr() needed on PY36 and older (replace w/attribute access). + if getattr(module, '__file__', None) is None: self.unmigrated_apps.add(app_config.label) continue # Module is not a package (e.g. migrations.py). diff --git a/django/db/migrations/questioner.py b/django/db/migrations/questioner.py index df08508a10..6668e33fda 100644 --- a/django/db/migrations/questioner.py +++ b/django/db/migrations/questioner.py @@ -46,7 +46,8 @@ class MigrationQuestioner(object): except ImportError: return self.defaults.get("ask_initial", False) else: - if hasattr(migrations_module, "__file__"): + # getattr() needed on PY36 and older (replace with attribute access). + if getattr(migrations_module, "__file__", None): filenames = os.listdir(os.path.dirname(migrations_module.__file__)) elif hasattr(migrations_module, "__path__"): if len(migrations_module.__path__) > 1: