#35422: Migration crash when renaming a field referenced in GeneratedField.expression on SQLite ---------------------------------------+------------------------ Reporter: Sarah Boyce | Owner: nobody Type: Bug | Status: new Component: Migrations | Version: 5.0 Severity: Normal | Keywords: Triage Stage: Unreviewed | Has patch: 0 Needs documentation: 0 | Needs tests: 0 Patch needs improvement: 0 | Easy pickings: 0 UI/UX: 0 | ---------------------------------------+------------------------ Given a model (migrated) on SQLite {{{ class Foo(models.Model): name = models.CharField(max_length=10) lower_name = models.GeneratedField( expression=Lower("name"), output_field=models.CharField(max_length=10), db_persist=True, ) }}} when you update to {{{ class Foo(models.Model): surname = models.CharField(max_length=10) lower_name = models.GeneratedField( expression=Lower("surname"), output_field=models.CharField(max_length=10), db_persist=True, ) }}} and makemigrations, you then get asked `Was foo.name renamed to foo.surname (a CharField)? [y/N]` and say `y` (because it was) You then get a crash when migrating:
{{{ Operations to perform: Apply all migrations: app3 Running migrations: Applying app3.0005_rename_name_foo_surname_alter_foo_lower_name...Traceback (most recent call last): File "path_to_project\mysite\manage.py", line 22, in <module> main() File "path_to_project\mysite\manage.py", line 18, in main execute_from_command_line(sys.argv) File "path_to_project\venv\Lib\site- packages\django\core\management\__init__.py", line 442, in execute_from_command_line utility.execute() File "path_to_project\venv\Lib\site- packages\django\core\management\__init__.py", line 436, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "path_to_project\venv\Lib\site- packages\django\core\management\base.py", line 413, in run_from_argv self.execute(*args, **cmd_options) File "path_to_project\venv\Lib\site- packages\django\core\management\base.py", line 459, in execute output = self.handle(*args, **options) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "path_to_project\venv\Lib\site- packages\django\core\management\base.py", line 107, in wrapper res = handle_func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "path_to_project\venv\Lib\site- packages\django\core\management\commands\migrate.py", line 356, in handle post_migrate_state = executor.migrate( ^^^^^^^^^^^^^^^^^ File "path_to_project\venv\Lib\site- packages\django\db\migrations\executor.py", line 135, in migrate state = self._migrate_all_forwards( ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "path_to_project\venv\Lib\site- packages\django\db\migrations\executor.py", line 167, in _migrate_all_forwards state = self.apply_migration( ^^^^^^^^^^^^^^^^^^^^^ File "path_to_project\venv\Lib\site- packages\django\db\migrations\executor.py", line 255, in apply_migration state = migration.apply(state, schema_editor) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "path_to_project\venv\Lib\site- packages\django\db\migrations\migration.py", line 132, in apply operation.database_forwards( File "path_to_project\venv\Lib\site- packages\django\db\migrations\operations\fields.py", line 241, in database_forwards schema_editor.alter_field(from_model, from_field, to_field) File "path_to_project\venv\Lib\site- packages\django\db\backends\base\schema.py", line 875, in alter_field or old_field.generated_sql(self.connection) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "path_to_project\venv\Lib\site- packages\django\db\models\fields\generated.py", line 58, in generated_sql resolved_expression = self.expression.resolve_expression( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "path_to_project\venv\Lib\site- packages\django\db\models\expressions.py", line 1052, in resolve_expression c.source_expressions[pos] = arg.resolve_expression( ^^^^^^^^^^^^^^^^^^^^^^^ File "path_to_project\venv\Lib\site- packages\django\db\models\expressions.py", line 874, in resolve_expression return query.resolve_ref(self.name, allow_joins, reuse, summarize) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "path_to_project\venv\Lib\site- packages\django\db\models\sql\query.py", line 2010, in resolve_ref join_info = self.setup_joins( ^^^^^^^^^^^^^^^^^ File "path_to_project\venv\Lib\site- packages\django\db\models\sql\query.py", line 1863, in setup_joins path, final_field, targets, rest = self.names_to_path( ^^^^^^^^^^^^^^^^^^^ File "path_to_project\venv\Lib\site- packages\django\db\models\sql\query.py", line 1768, in names_to_path raise FieldError( django.core.exceptions.FieldError: Cannot resolve keyword 'name' into field. Choices are: id, lower_name, surname }}} -- Ticket URL: <https://code.djangoproject.com/ticket/35422> Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-updates+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/0107018f398f1d89-62bcf223-e3da-485c-a79d-748690c55797-000000%40eu-central-1.amazonses.com.