﻿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
24110	Unapplying a migration has side-effects on the ProjectState passed to the method	Markus Holtermann	Markus Holtermann	"`django.db.migrations.migration.Migration.unapply()` accepts an argument `state` that represents the project state right before the migration is applied. The current implementation alters this state when building the intermediate states to which each operation rolls back, instead of using a copy. This side effect results in errors where e.g. a model can exists in the state, but its gone from the database.

{{{#!python
Traceback (most recent call last):
  File ""manage.py"", line 10, in <module>
    execute_from_command_line(sys.argv)
  File ""/home/markus/Coding/django/django/core/management/__init__.py"", line 338, in execute_from_command_line
    utility.execute()
  File ""/home/markus/Coding/django/django/core/management/__init__.py"", line 330, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File ""/home/markus/Coding/django/django/core/management/base.py"", line 390, in run_from_argv
    self.execute(*args, **cmd_options)
  File ""/home/markus/Coding/django/django/core/management/base.py"", line 444, in execute
    output = self.handle(*args, **options)
  File ""/home/markus/Coding/django/django/core/management/commands/migrate.py"", line 213, in handle
    executor.migrate(targets, plan, fake=options.get(""fake"", False))
  File ""/home/markus/Coding/django/django/db/migrations/executor.py"", line 73, in migrate
    state = self.unapply_migration(state, migration, fake=fake)
  File ""/home/markus/Coding/django/django/db/migrations/executor.py"", line 127, in unapply_migration
    state = migration.unapply(state, schema_editor)
  File ""/home/markus/Coding/django/django/db/migrations/migration.py"", line 135, in unapply
    operation.state_forwards(self.app_label, project_state)
  File ""/home/markus/Coding/django/django/db/migrations/operations/models.py"", line 53, in state_forwards
    list(self.managers),
  File ""/home/markus/Coding/django/django/db/migrations/state.py"", line 39, in add_model
    self.reload_model(app_label, model_name)
  File ""/home/markus/Coding/django/django/db/migrations/state.py"", line 61, in reload_model
    self._reload_one_model(rel_model._meta.app_label, rel_model._meta.model_name)
AttributeError: 'str' object has no attribute '_meta'
}}}"	Bug	closed	Migrations	dev	Release blocker	fixed			Ready for checkin	1	0	0	0	0	0
