[1.6.x] Fixed #20933 -- Allowed loaddata to load fixtures from relative paths.

Backport of 6e846f7627 from master.
This commit is contained in:
Florian Apolloner 2013-08-20 19:03:33 +02:00
parent b189169ed0
commit 12d364a9b0
4 changed files with 19 additions and 10 deletions

View File

@ -181,7 +181,7 @@ class Command(BaseCommand):
if self.verbosity >= 2: if self.verbosity >= 2:
self.stdout.write("Loading '%s' fixtures..." % fixture_name) self.stdout.write("Loading '%s' fixtures..." % fixture_name)
if os.path.isabs(fixture_name): if os.path.sep in fixture_name:
fixture_dirs = [os.path.dirname(fixture_name)] fixture_dirs = [os.path.dirname(fixture_name)]
fixture_name = os.path.basename(fixture_name) fixture_name = os.path.basename(fixture_name)
else: else:

View File

@ -90,8 +90,8 @@ fixtures. You can set the :setting:`FIXTURE_DIRS` setting to a list of
additional directories where Django should look. additional directories where Django should look.
When running :djadmin:`manage.py loaddata <loaddata>`, you can also When running :djadmin:`manage.py loaddata <loaddata>`, you can also
specify an absolute path to a fixture file, which overrides searching specify a path to a fixture file, which overrides searching the usual
the usual directories. directories.
.. seealso:: .. seealso::

View File

@ -39,12 +39,6 @@ class Stuff(models.Model):
class Absolute(models.Model): class Absolute(models.Model):
name = models.CharField(max_length=40) name = models.CharField(max_length=40)
load_count = 0
def __init__(self, *args, **kwargs):
super(Absolute, self).__init__(*args, **kwargs)
Absolute.load_count += 1
class Parent(models.Model): class Parent(models.Model):
name = models.CharField(max_length=10) name = models.CharField(max_length=10)

View File

@ -148,7 +148,22 @@ class TestFixtures(TestCase):
load_absolute_path, load_absolute_path,
verbosity=0, verbosity=0,
) )
self.assertEqual(Absolute.load_count, 1) self.assertEqual(Absolute.objects.count(), 1)
def test_relative_path(self):
directory = os.path.dirname(upath(__file__))
relative_path = os.path.join('fixtures', 'absolute.json')
cwd = os.getcwd()
try:
os.chdir(directory)
management.call_command(
'loaddata',
relative_path,
verbosity=0,
)
finally:
os.chdir(cwd)
self.assertEqual(Absolute.objects.count(), 1)
def test_unknown_format(self): def test_unknown_format(self):
""" """