mirror of
https://github.com/django/django.git
synced 2024-12-22 17:16:24 +00:00
Fixed #23699 -- Prevented flush from loading initial data for apps with migrations.
This commit is contained in:
parent
ed7c4df1ee
commit
dd1ea70779
@ -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(), [])
|
Loading…
Reference in New Issue
Block a user