[1.7.x] Fixed #23699 -- Prevented flush from loading initial data for apps with migrations.
Backport of dd1ea70779
from master.
This commit is contained in:
parent
e317d7fc72
commit
5cc8180a65
|
@ -84,9 +84,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")
|
||||||
|
|
||||||
|
|
|
@ -18,3 +18,6 @@ Bugfixes
|
||||||
* Warn for duplicate models when a module is reloaded. Previously a
|
* Warn for duplicate models when a module is reloaded. Previously a
|
||||||
RuntimeError was raised every time two models clashed in the app registry.
|
RuntimeError was raised every time two models clashed in the app registry.
|
||||||
(:ticket:`23621`).
|
(:ticket:`23621`).
|
||||||
|
|
||||||
|
* Prevented :djadmin:`flush` from loading initial data for migrated apps
|
||||||
|
(:ticket:`23699`).
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"pk": "10",
|
||||||
|
"model": "fixtures_migration.book",
|
||||||
|
"fields": {
|
||||||
|
"name": "Achieving self-awareness of Python programs"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
|
@ -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,0 +1,5 @@
|
||||||
|
from django.db import models
|
||||||
|
|
||||||
|
|
||||||
|
class Book(models.Model):
|
||||||
|
name = models.CharField(max_length=100)
|
|
@ -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 = ['django.contrib.auth', 'django.contrib.contenttypes', '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(), [])
|
Loading…
Reference in New Issue