﻿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
26384	Migrations crash renaming the pk of a model with a self-referential foreign key on SQLite	Brian May	nobody	"With open source project called spud.

Generates Exception:

{{{
FieldDoesNotExist: album has no field named u'album_id'
}}}

This field was removed. However in the migration that is being run when it fails, it did exist. So as a result, I suspect this isn't #26180.

The migration in question attempts to rename the album_id field to id.


Works fine with Django < =1.8


Stack Trace:

{{{
/usr/lib/python2.7/dist-packages/pytest_django/fixtures.py:54: in _django_db_setup
    interactive=False)
/tmp/deleteme/local/lib/python2.7/site-packages/django/test/runner.py:726: in setup_databases
    serialize=connection.settings_dict.get(""TEST"", {}).get(""SERIALIZE"", True),
/tmp/deleteme/local/lib/python2.7/site-packages/django/db/backends/base/creation.py:70: in create_test_db
    run_syncdb=True,
/tmp/deleteme/local/lib/python2.7/site-packages/django/core/management/__init__.py:119: in call_command
    return command.execute(*args, **defaults)
/tmp/deleteme/local/lib/python2.7/site-packages/django/core/management/base.py:399: in execute
    output = self.handle(*args, **options)
/tmp/deleteme/local/lib/python2.7/site-packages/django/core/management/commands/migrate.py:200: in handle
    executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial)
/tmp/deleteme/local/lib/python2.7/site-packages/django/db/migrations/executor.py:92: in migrate
    self._migrate_all_forwards(plan, full_plan, fake=fake, fake_initial=fake_initial)
/tmp/deleteme/local/lib/python2.7/site-packages/django/db/migrations/executor.py:121: in _migrate_all_forwards
    state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
/tmp/deleteme/local/lib/python2.7/site-packages/django/db/migrations/executor.py:198: in apply_migration
    state = migration.apply(state, schema_editor)
/tmp/deleteme/local/lib/python2.7/site-packages/django/db/migrations/migration.py:123: in apply
    operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
/tmp/deleteme/local/lib/python2.7/site-packages/django/db/migrations/operations/fields.py:275: in database_forwards
    to_model._meta.get_field(self.new_name),
/tmp/deleteme/local/lib/python2.7/site-packages/django/db/backends/base/schema.py:482: in alter_field
    old_db_params, new_db_params, strict)
/tmp/deleteme/local/lib/python2.7/site-packages/django/db/backends/sqlite3/schema.py:245: in _alter_field
    self._remake_table(model, alter_fields=[(old_field, new_field)])
/tmp/deleteme/local/lib/python2.7/site-packages/django/db/backends/sqlite3/schema.py:181: in _remake_table
    self.create_model(temp_model)
/tmp/deleteme/local/lib/python2.7/site-packages/django/db/backends/base/schema.py:250: in create_model
    to_column = field.remote_field.model._meta.get_field(field.remote_field.field_name).column
}}}

Actual error is in get_field() at

{{{
/tmp/deleteme/local/lib/python2.7/site-packages/django/db/models/options.py:582: FieldDoesNotExist
}}}

The migration that appears to be causing the problems (wish I could tell which step was failing):

{{{
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models, migrations


class Migration(migrations.Migration):

    dependencies = [
        ('spud', '0003_auto_20141217_0908'),
    ]

    operations = [
        migrations.AlterModelOptions(
            name='photo',
            options={'ordering': ['datetime', 'id']},
        ),
        migrations.RenameField(
            model_name='album',
            old_name='album_id',
            new_name='id',
        ),
        migrations.RenameField(
            model_name='category',
            old_name='category_id',
            new_name='id',
        ),
        migrations.RenameField(
            model_name='person',
            old_name='person_id',
            new_name='id',
        ),
        migrations.RenameField(
            model_name='photo',
            old_name='photo_id',
            new_name='id',
        ),
        migrations.RenameField(
            model_name='place',
            old_name='place_id',
            new_name='id',
        ),
    ]
}}}"	Bug	closed	Migrations	1.9	Release blocker	fixed		Alex Hill	Accepted	1	0	0	0	0	0
