Opened 10 years ago

Closed 10 years ago

Last modified 10 years ago

#23100 closed Bug (fixed)

Applying migrations fails when adding a ForeignKey to swappable user model after initial migration

Reported by: Mattias Linnap Owned by: Andrew Godwin
Component: Migrations Version: 1.7-rc-2
Severity: Release blocker Keywords:
Cc: Andrew Godwin Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

./manage.py migrate fails with ValueError: Lookup failed for model referenced by field foo.A.owner: accounts.EmailUser or similar when a ForeignKey to a swapped out user model is added after the initial migration.

Note that both making the migration and applying it work if the ForeignKey to the swappable user model is added in the very first initial migration, but not if it is added later.

I've tested this on both the 1.7 RC1 version, and the latest github checkout of branch "stable/1.7.x".

Steps to reproduce:

  1. Create a swappable user model, add it to settings.py, create and run migrations.
  2. Create a new model in a new app. Do not give it a reference to the user model.
  3. Add a ForeignKey from the new model to the custom user model.
  4. Run makemigrations. This works.
  5. Run migrate. This fails.

Workaround:

  1. Add migrations.swappable_dependency(settings.AUTH_USER_MODEL), to the list of dependencies of the failing migration by hand.

Initial investigation:
Swappable user ForeignKeys are referenced as ('owner', models.ForeignKey(to=settings.AUTH_USER_MODEL)), in the migration scripts.

It seems that if the ForeignKey is added in the initial migration of a new app, then dependencies are correctly added:

dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

But if the ForeignKey is added in a later migration, then the initial migration's dependencies are empty, and the second migration's only dependency is:

dependencies = [
        ('foo', '0001_initial'),
    ]

Change History (6)

comment:1 by Mattias Linnap, 10 years ago

Sorry, I missed a step in the reproduction instructions. They are:

  1. Create a swappable user model, add it to settings.py, create and run migrations.
  2. Create a new model in a new app. Do not give it a reference to the user model.
  3. Run makemigrations and migrate. Both work.
  4. Add a ForeignKey from the new model to the custom user model.
  5. Run makemigrations. This works.
  6. Run migrate. This fails.

comment:2 by Mattias Linnap <mattias@…>, 10 years ago

Version: 1.7-rc-11.7-rc-2

Also tested on 1.7 RC2.

comment:3 by Andrew Godwin, 10 years ago

I suspect this is a duplicate of #22944.

comment:4 by Andrew Godwin, 10 years ago

Owner: changed from nobody to Andrew Godwin
Severity: NormalRelease blocker
Status: newassigned

Closed #22944 in favour of this, promoting this to release blocker.

comment:5 by Andrew Godwin <andrew@…>, 10 years ago

Resolution: fixed
Status: assignedclosed

In cb60d22bd94738174440f8d60a04c3d9c38636c9:

Fixed #23100: Individual FK creation missing dependencies

comment:6 by Andrew Godwin <andrew@…>, 10 years ago

In d84b881600788e9a9d3c2ad7d3fe4a03d1880086:

[1.7.x] Fixed #23100: Individual FK creation missing dependencies

Note: See TracTickets for help on using tickets.
Back to Top