mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	[1.6.x] Fixed #21551 -- Reenabled loading fixtures from subdirectory
This was a regression in Django 1.6 that was only partially restored in839940f27f. Thanks Jonas Haag for the report. Backport of41ebc4838dfrom master.
This commit is contained in:
		| @@ -175,11 +175,15 @@ class Command(BaseCommand): | ||||
|         if self.verbosity >= 2: | ||||
|             self.stdout.write("Loading '%s' fixtures..." % fixture_name) | ||||
|  | ||||
|         if os.path.sep in fixture_name: | ||||
|         if os.path.isabs(fixture_name): | ||||
|             fixture_dirs = [os.path.dirname(fixture_name)] | ||||
|             fixture_name = os.path.basename(fixture_name) | ||||
|         else: | ||||
|             fixture_dirs = self.fixture_dirs | ||||
|             if os.path.sep in fixture_name: | ||||
|                 fixture_dirs = [os.path.join(dir_, os.path.dirname(fixture_name)) | ||||
|                                 for dir_ in fixture_dirs] | ||||
|                 fixture_name = os.path.basename(fixture_name) | ||||
|  | ||||
|         suffixes = ('.'.join(ext for ext in combo if ext) | ||||
|                 for combo in product(databases, ser_fmts, cmp_fmts)) | ||||
|   | ||||
| @@ -28,7 +28,8 @@ Bug fixes | ||||
| * Fixed ``django.contrib.humanize`` translations where the unicode sequence | ||||
|   for the non-breaking space was returned verbatim (#21415). | ||||
| * Fixed :djadmin:`loaddata` error when fixture file name contained any dots | ||||
|   non related to file extensions (#21457). | ||||
|   non related to file extensions (#21457) or when fixture path was relative | ||||
|   but located in a subdirectory (#21551). | ||||
| * Fixed display of inline instances in formsets when parent has 0 for primary | ||||
|   key (#21472). | ||||
| * Fixed a regression where custom querysets for foreign keys were overwritten | ||||
|   | ||||
							
								
								
									
										9
									
								
								tests/fixtures_regress/fixtures_1/inner/absolute.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								tests/fixtures_regress/fixtures_1/inner/absolute.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| [ | ||||
|     { | ||||
|         "pk": "1", | ||||
|         "model": "fixtures_regress.absolute", | ||||
|         "fields": { | ||||
|             "name": "Load Absolute Path Test" | ||||
|         } | ||||
|     } | ||||
| ] | ||||
| @@ -2,6 +2,7 @@ | ||||
| # Unittests for fixtures. | ||||
| from __future__ import absolute_import, unicode_literals | ||||
|  | ||||
| import json | ||||
| import os | ||||
| import re | ||||
| import warnings | ||||
| @@ -19,12 +20,13 @@ from django.utils.encoding import force_text | ||||
| from django.utils._os import upath | ||||
| from django.utils import six | ||||
| from django.utils.six import PY3, StringIO | ||||
| import json | ||||
|  | ||||
| from .models import (Animal, Stuff, Absolute, Parent, Child, Article, Widget, | ||||
|     Store, Person, Book, NKChild, RefToNKChild, Circle1, Circle2, Circle3, | ||||
|     ExternalDependency, Thingy) | ||||
|  | ||||
| _cur_dir = os.path.dirname(os.path.abspath(upath(__file__))) | ||||
|  | ||||
|  | ||||
| class TestFixtures(TestCase): | ||||
|  | ||||
| @@ -150,12 +152,11 @@ class TestFixtures(TestCase): | ||||
|         ) | ||||
|         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') | ||||
|     def test_relative_path(self, path=['fixtures', 'absolute.json']): | ||||
|         relative_path = os.path.join(*path) | ||||
|         cwd = os.getcwd() | ||||
|         try: | ||||
|             os.chdir(directory) | ||||
|             os.chdir(_cur_dir) | ||||
|             management.call_command( | ||||
|                 'loaddata', | ||||
|                 relative_path, | ||||
| @@ -165,6 +166,10 @@ class TestFixtures(TestCase): | ||||
|             os.chdir(cwd) | ||||
|         self.assertEqual(Absolute.objects.count(), 1) | ||||
|  | ||||
|     @override_settings(FIXTURE_DIRS=[os.path.join(_cur_dir, 'fixtures_1')]) | ||||
|     def test_relative_path_in_fixture_dirs(self): | ||||
|         self.test_relative_path(path=['inner', 'absolute.json']) | ||||
|  | ||||
|     def test_path_containing_dots(self): | ||||
|         management.call_command( | ||||
|             'loaddata', | ||||
| @@ -412,8 +417,6 @@ class TestFixtures(TestCase): | ||||
|                 verbosity=0, | ||||
|             ) | ||||
|  | ||||
|     _cur_dir = os.path.dirname(os.path.abspath(upath(__file__))) | ||||
|  | ||||
|     @override_settings(FIXTURE_DIRS=[os.path.join(_cur_dir, 'fixtures_1'), | ||||
|                                      os.path.join(_cur_dir, 'fixtures_2')]) | ||||
|     def test_loaddata_forward_refs_split_fixtures(self): | ||||
|   | ||||
		Reference in New Issue
	
	Block a user