#25817: Unable to rename a field reference in foreign key 'to_field' -------------------------------+----------------------------- Reporter: snopoke | Owner: nobody Type: Uncategorized | Status: new Component: Migrations | Version: 1.7 Severity: Normal | Keywords: to_field rename Triage Stage: Unreviewed | Has patch: 0 Easy pickings: 0 | UI/UX: 0 -------------------------------+----------------------------- Steps to reproduce:
1. Create a model with a foreign key referencing another model's field via the 'to_field' arg. 2. Generate the initial migration {{{#!python class Bar(models.Model): bar_id = models.CharField(max_length=255, db_index=True, unique=True) class Bazz(models.Model): bar = models.ForeignKey(Bar, to_field='bar_id') }}} 3. Rename the field referenced in 'to_field' and create a migration for the change Rename 'bar_id' to 'external_id': {{{#!python class Bar(models.Model): external_id = models.CharField(max_length=255, db_index=True, unique=True) class Bazz(models.Model): bar = models.ForeignKey(Bar, to_field='external_id') }}} Migration: {{{#!python operations = [ migrations.RenameField( model_name='bar', old_name='bar_id', new_name='external_id', ), migrations.AlterField( model_name='bazz', name='bar', field=models.ForeignKey(to='form_processor.Bar', to_field=b'external_id'), preserve_default=True, ), ] }}} 4. Run the migration Error: {{{ Traceback (most recent call last): File "./manage.py", line 73, in <module> execute_from_command_line(sys.argv) File "/home/skelly/.virtualenvs/hq/local/lib/python2.7/site- packages/django/core/management/__init__.py", line 385, in execute_from_command_line utility.execute() File "/home/skelly/.virtualenvs/hq/local/lib/python2.7/site- packages/django/core/management/__init__.py", line 377, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/home/skelly/.virtualenvs/hq/local/lib/python2.7/site- packages/django/core/management/base.py", line 288, in run_from_argv self.execute(*args, **options.__dict__) File "/home/skelly/.virtualenvs/hq/local/lib/python2.7/site- packages/django/core/management/commands/sqlmigrate.py", line 30, in execute return super(Command, self).execute(*args, **options) File "/home/skelly/.virtualenvs/hq/local/lib/python2.7/site- packages/django/core/management/base.py", line 338, in execute output = self.handle(*args, **options) File "/home/skelly/.virtualenvs/hq/local/lib/python2.7/site- packages/django/core/management/commands/sqlmigrate.py", line 61, in handle sql_statements = executor.collect_sql(plan) File "/home/skelly/.virtualenvs/hq/local/lib/python2.7/site- packages/django/db/migrations/executor.py", line 82, in collect_sql migration.apply(project_state, schema_editor, collect_sql=True) File "/home/skelly/.virtualenvs/hq/local/lib/python2.7/site- packages/django/db/migrations/migration.py", line 108, in apply operation.database_forwards(self.app_label, schema_editor, project_state, new_state) File "/home/skelly/.virtualenvs/hq/local/lib/python2.7/site- packages/django/db/migrations/operations/fields.py", line 139, in database_forwards schema_editor.alter_field(from_model, from_field, to_field) File "/home/skelly/.virtualenvs/hq/local/lib/python2.7/site- packages/django/db/backends/schema.py", line 445, in alter_field old_db_params = old_field.db_parameters(connection=self.connection) File "/home/skelly/.virtualenvs/hq/local/lib/python2.7/site- packages/django/db/models/fields/related.py", line 1787, in db_parameters return {"type": self.db_type(connection), "check": []} File "/home/skelly/.virtualenvs/hq/local/lib/python2.7/site- packages/django/db/models/fields/related.py", line 1778, in db_type rel_field = self.related_field File "/home/skelly/.virtualenvs/hq/local/lib/python2.7/site- packages/django/db/models/fields/related.py", line 1684, in related_field return self.foreign_related_fields[0] File "/home/skelly/.virtualenvs/hq/local/lib/python2.7/site- packages/django/db/models/fields/related.py", line 1442, in foreign_related_fields return tuple(rhs_field for lhs_field, rhs_field in self.related_fields) File "/home/skelly/.virtualenvs/hq/local/lib/python2.7/site- packages/django/db/models/fields/related.py", line 1429, in related_fields self._related_fields = self.resolve_related_fields() File "/home/skelly/.virtualenvs/hq/local/lib/python2.7/site- packages/django/db/models/fields/related.py", line 1422, in resolve_related_fields else self.rel.to._meta.get_field_by_name(to_field_name)[0]) File "/home/skelly/.virtualenvs/hq/local/lib/python2.7/site- packages/django/db/models/options.py", line 420, in get_field_by_name % (self.object_name, name)) django.db.models.fields.FieldDoesNotExist: Bar has no field named 'bar_id' }}} -- Ticket URL: <https://code.djangoproject.com/ticket/25817> 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 post to this group, send email to django-updates@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/050.caeed29c84e4a8695a593228644ba6ff%40djangoproject.com. For more options, visit https://groups.google.com/d/optout.