mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Fixed #23699 -- Prevented flush from loading initial data for apps with migrations.
This commit is contained in:
		| @@ -85,9 +85,13 @@ Are you sure you want to do this? | ||||
|  | ||||
|             # Reinstall the initial_data fixture. | ||||
|             if options.get('load_initial_data'): | ||||
|                 # Reinstall the initial_data fixture. | ||||
|                 call_command('loaddata', 'initial_data', **options) | ||||
|  | ||||
|                 # Reinstall the initial_data fixture for apps without migrations. | ||||
|                 from django.db.migrations.executor import MigrationExecutor | ||||
|                 executor = MigrationExecutor(connection) | ||||
|                 app_options = options.copy() | ||||
|                 for app_label in executor.loader.unmigrated_apps: | ||||
|                     app_options['app_label'] = app_label | ||||
|                     call_command('loaddata', 'initial_data', **app_options) | ||||
|         else: | ||||
|             self.stdout.write("Flush cancelled.\n") | ||||
|  | ||||
|   | ||||
| @@ -14,3 +14,6 @@ Bugfixes | ||||
|  | ||||
| * Fixed a migration crash when adding an explicit ``id`` field to a model on | ||||
|   SQLite (:ticket:`23702`). | ||||
|  | ||||
| * Prevented :djadmin:`flush` from loading initial data for migrated apps | ||||
|   (:ticket:`23699`). | ||||
|   | ||||
							
								
								
									
										0
									
								
								tests/fixtures_migration/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								tests/fixtures_migration/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										9
									
								
								tests/fixtures_migration/fixtures/initial_data.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								tests/fixtures_migration/fixtures/initial_data.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| [ | ||||
|     { | ||||
|         "pk": "10", | ||||
|         "model": "fixtures_migration.book", | ||||
|         "fields": { | ||||
|             "name": "Achieving self-awareness of Python programs" | ||||
|         } | ||||
|     } | ||||
| ] | ||||
							
								
								
									
										16
									
								
								tests/fixtures_migration/migrations/0001_initial.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								tests/fixtures_migration/migrations/0001_initial.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
|  | ||||
| from django.db import migrations, models | ||||
|  | ||||
|  | ||||
| class Migration(migrations.Migration): | ||||
|  | ||||
|     operations = [ | ||||
|         migrations.CreateModel( | ||||
|             "Book", | ||||
|             [ | ||||
|                 ("name", models.CharField(max_length=100)), | ||||
|             ], | ||||
|         ), | ||||
|     ] | ||||
							
								
								
									
										0
									
								
								tests/fixtures_migration/migrations/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								tests/fixtures_migration/migrations/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										5
									
								
								tests/fixtures_migration/models.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								tests/fixtures_migration/models.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| from django.db import models | ||||
|  | ||||
|  | ||||
| class Book(models.Model): | ||||
|     name = models.CharField(max_length=100) | ||||
							
								
								
									
										31
									
								
								tests/fixtures_migration/tests.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								tests/fixtures_migration/tests.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | ||||
| from django.test import TestCase | ||||
| from django.core import management | ||||
|  | ||||
| from .models import Book | ||||
|  | ||||
|  | ||||
| class TestNoInitialDataLoading(TestCase): | ||||
|     """ | ||||
|     Apps with migrations should ignore initial data. This test can be removed | ||||
|     in Django 1.9 when migrations become required and initial data is no longer | ||||
|     supported. | ||||
|     """ | ||||
|     available_apps = ['fixtures_migration'] | ||||
|  | ||||
|     def test_migrate(self): | ||||
|         self.assertQuerysetEqual(Book.objects.all(), []) | ||||
|         management.call_command( | ||||
|             'migrate', | ||||
|             verbosity=0, | ||||
|         ) | ||||
|         self.assertQuerysetEqual(Book.objects.all(), []) | ||||
|  | ||||
|     def test_flush(self): | ||||
|         self.assertQuerysetEqual(Book.objects.all(), []) | ||||
|         management.call_command( | ||||
|             'flush', | ||||
|             verbosity=0, | ||||
|             interactive=False, | ||||
|             load_initial_data=False | ||||
|         ) | ||||
|         self.assertQuerysetEqual(Book.objects.all(), []) | ||||
		Reference in New Issue
	
	Block a user