diff --git a/django/core/management/sql.py b/django/core/management/sql.py index 323cb5423d..a834627c38 100644 --- a/django/core/management/sql.py +++ b/django/core/management/sql.py @@ -36,7 +36,7 @@ def sql_create(app_config, style, connection): # We trim models from the current app so that the sqlreset command does not # generate invalid SQL (leaving models out of known_models is harmless, so # we can be conservative). - app_models = app_config.get_models(include_auto_created=True) + app_models = list(app_config.get_models(include_auto_created=True)) final_output = [] tables = connection.introspection.table_names() known_models = set(model for model in connection.introspection.installed_models(tables) if model not in app_models) diff --git a/tests/commands_sql/tests.py b/tests/commands_sql/tests.py index 8360648e51..d057883728 100644 --- a/tests/commands_sql/tests.py +++ b/tests/commands_sql/tests.py @@ -1,5 +1,7 @@ from __future__ import unicode_literals +import re + from django.apps import apps from django.core.management.color import no_style from django.core.management.sql import (sql_create, sql_delete, sql_indexes, @@ -19,11 +21,25 @@ class SQLCommandsTestCase(TestCase): def test_sql_create(self): app_config = apps.get_app_config('commands_sql') output = sql_create(app_config, no_style(), connections[DEFAULT_DB_ALIAS]) - create_tables = [o for o in output if o.startswith('CREATE TABLE')] - self.assertEqual(len(create_tables), 3) - # Lower so that Oracle's upper case tbl names wont break - sql = create_tables[-1].lower() - six.assertRegex(self, sql, r'^create table .commands_sql_book.*') + + tables = set() + create_table_re = re.compile(r'^create table .(?P