diff --git a/django/core/management/commands/loaddata.py b/django/core/management/commands/loaddata.py index 45f25c21db..6856e85e45 100644 --- a/django/core/management/commands/loaddata.py +++ b/django/core/management/commands/loaddata.py @@ -16,6 +16,7 @@ from django.db import (connections, router, transaction, DEFAULT_DB_ALIAS, from django.db.models import get_app_paths from django.utils.encoding import force_text from django.utils.functional import cached_property, memoize +from django.utils._os import upath from itertools import product try: @@ -237,7 +238,7 @@ class Command(BaseCommand): dirs.append(d) dirs.extend(list(settings.FIXTURE_DIRS)) dirs.append('') - dirs = [os.path.abspath(os.path.realpath(d)) for d in dirs] + dirs = [upath(os.path.abspath(os.path.realpath(d))) for d in dirs] return dirs def parse_name(self, fixture_name): diff --git a/django/utils/_os.py b/django/utils/_os.py index 6c1cd17a83..607e02c94d 100644 --- a/django/utils/_os.py +++ b/django/utils/_os.py @@ -38,7 +38,7 @@ def upath(path): """ Always return a unicode path. """ - if not six.PY3: + if not six.PY3 and not isinstance(path, six.text_type): return path.decode(fs_encoding) return path