id,summary,reporter,owner,description,type,status,component,version,severity,resolution,keywords,cc,stage,has_patch,needs_docs,needs_tests,needs_better_patch,easy,ui_ux 24849,Broken squashmigration when model related to another one gets deleted,Piotr Maliński,nobody,"I've got a simple example of an broken squashmigration I had in two apps. The problem is that if a model gets deleted, that has relation to other model then the squash will crash as something will want to do some operation on the non-existing model (relation presence is essential, tested on postgres): Initial: {{{ class Category(models.Model): title = models.CharField(max_length=100) class News(models.Model): title = models.CharField(max_length=100) category = models.ForeignKey(Category) }}} Second migration: {{{ class Category(models.Model): title = models.CharField(max_length=100) class NewCategory(models.Model): title = models.CharField(max_length=100) class News(models.Model): title = models.CharField(max_length=100) category = models.ForeignKey(NewCategory, blank=True, null=True) new_category = models.ForeignKey(NewCategory, blank=True, null=True) }}} Third: {{{ class NewCategory(models.Model): title = models.CharField(max_length=100) class News(models.Model): title = models.CharField(max_length=100) new_category = models.ForeignKey(NewCategory, blank=True, null=True) }}} Squash looks like so: {{{ operations = [ migrations.CreateModel( name='Category', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('title', models.CharField(max_length=100)), ], ), migrations.CreateModel( name='News', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('title', models.CharField(max_length=100)), ('category', models.ForeignKey(blank=True, to='relateddeleted.Category', null=True)), ], ), migrations.CreateModel( name='NewCategory', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('title', models.CharField(max_length=100)), ], ), migrations.AddField( model_name='news', name='new_category', field=models.ForeignKey(blank=True, to='relateddeleted.NewCategory', null=True), ), migrations.RemoveField( model_name='news', name='category', ), migrations.DeleteModel( name='Category', ), ] }}} And on a clean database it throws: {{{ Applying relateddeleted.0001_squashed_0003_auto_20150524_2020...Traceback (most recent call last): File ""/home/piotr/devel/envs/migracje/lib/python3.4/site-packages/django/db/backends/utils.py"", line 64, in execute return self.cursor.execute(sql, params) psycopg2.ProgrammingError: relation ""relateddeleted_category"" does not exist The above exception was the direct cause of the following exception: Traceback (most recent call last): File ""manage.py"", line 10, in execute_from_command_line(sys.argv) File ""/home/piotr/devel/envs/migracje/lib/python3.4/site-packages/django/core/management/__init__.py"", line 338, in execute_from_command_line utility.execute() File ""/home/piotr/devel/envs/migracje/lib/python3.4/site-packages/django/core/management/__init__.py"", line 330, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File ""/home/piotr/devel/envs/migracje/lib/python3.4/site-packages/django/core/management/commands/test.py"", line 30, in run_from_argv super(Command, self).run_from_argv(argv) File ""/home/piotr/devel/envs/migracje/lib/python3.4/site-packages/django/core/management/base.py"", line 390, in run_from_argv self.execute(*args, **cmd_options) File ""/home/piotr/devel/envs/migracje/lib/python3.4/site-packages/django/core/management/commands/test.py"", line 74, in execute super(Command, self).execute(*args, **options) File ""/home/piotr/devel/envs/migracje/lib/python3.4/site-packages/django/core/management/base.py"", line 441, in execute output = self.handle(*args, **options) File ""/home/piotr/devel/envs/migracje/lib/python3.4/site-packages/django/core/management/commands/test.py"", line 90, in handle failures = test_runner.run_tests(test_labels) File ""/home/piotr/devel/envs/migracje/lib/python3.4/site-packages/django/test/runner.py"", line 210, in run_tests old_config = self.setup_databases() File ""/home/piotr/devel/envs/migracje/lib/python3.4/site-packages/django/test/runner.py"", line 166, in setup_databases **kwargs File ""/home/piotr/devel/envs/migracje/lib/python3.4/site-packages/django/test/runner.py"", line 370, in setup_databases serialize=connection.settings_dict.get(""TEST"", {}).get(""SERIALIZE"", True), File ""/home/piotr/devel/envs/migracje/lib/python3.4/site-packages/django/db/backends/base/creation.py"", line 368, in create_test_db test_flush=not keepdb, File ""/home/piotr/devel/envs/migracje/lib/python3.4/site-packages/django/core/management/__init__.py"", line 120, in call_command return command.execute(*args, **defaults) File ""/home/piotr/devel/envs/migracje/lib/python3.4/site-packages/django/core/management/base.py"", line 441, in execute output = self.handle(*args, **options) File ""/home/piotr/devel/envs/migracje/lib/python3.4/site-packages/django/core/management/commands/migrate.py"", line 221, in handle executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial) File ""/home/piotr/devel/envs/migracje/lib/python3.4/site-packages/django/db/migrations/executor.py"", line 110, in migrate self.apply_migration(states[migration], migration, fake=fake, fake_initial=fake_initial) File ""/home/piotr/devel/envs/migracje/lib/python3.4/site-packages/django/db/migrations/executor.py"", line 147, in apply_migration state = migration.apply(state, schema_editor) File ""/home/piotr/devel/envs/migracje/lib/python3.4/site-packages/django/db/backends/base/schema.py"", line 91, in __exit__ self.execute(sql) File ""/home/piotr/devel/envs/migracje/lib/python3.4/site-packages/django/db/backends/base/schema.py"", line 111, in execute cursor.execute(sql, params) File ""/home/piotr/devel/envs/migracje/lib/python3.4/site-packages/django/db/backends/utils.py"", line 64, in execute return self.cursor.execute(sql, params) File ""/home/piotr/devel/envs/migracje/lib/python3.4/site-packages/django/db/utils.py"", line 97, in __exit__ six.reraise(dj_exc_type, dj_exc_value, traceback) File ""/home/piotr/devel/envs/migracje/lib/python3.4/site-packages/django/utils/six.py"", line 658, in reraise raise value.with_traceback(tb) File ""/home/piotr/devel/envs/migracje/lib/python3.4/site-packages/django/db/backends/utils.py"", line 64, in execute return self.cursor.execute(sql, params) django.db.utils.ProgrammingError: relation ""relateddeleted_category"" does not exist }}}",Bug,new,Migrations,1.8,Normal,,,,Unreviewed,0,0,0,0,0,0