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. |             # Reinstall the initial_data fixture. | ||||||
|             if options.get('load_initial_data'): |             if options.get('load_initial_data'): | ||||||
|                 # Reinstall the initial_data fixture. |                 # Reinstall the initial_data fixture for apps without migrations. | ||||||
|                 call_command('loaddata', 'initial_data', **options) |                 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: |         else: | ||||||
|             self.stdout.write("Flush cancelled.\n") |             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 | * Fixed a migration crash when adding an explicit ``id`` field to a model on | ||||||
|   SQLite (:ticket:`23702`). |   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