#28056: Reverse migration for model rename with cross-app ForeignKey fails ----------------------------------------+------------------------ Reporter: Paul Tiplady | Owner: nobody Type: Bug | Status: new Component: Migrations | Version: 1.10 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 | ----------------------------------------+------------------------ When attempting to reverse a migration for the rename of a model, where the model has ForeignKey references to it from models in other apps, the reverse migration fails with the following error:
`ValueError: The field <foreignkey_field> was declared with a lazy reference to '<old_model_name>', but app 'one' doesn't provide model '<old_model_name>'` I've put a simple repro up on github here: https://github.com/paultiplady /django-migration-bug, but here's an outline of the problem: With two apps, `one` and `two`, and the models: one/models.py: {{{ from django.db import models class Rename1(models.Model): pass }}} two/models.py: {{{ from django.db import models class Related2(models.Model): rename1 = models.ForeignKey('one.Rename1') }}} Renaming Rename1 to Rename2 produces a simple migration: 0002_auto_20170408_1617.py: {{{ class Migration(migrations.Migration): dependencies = [ ('one', '0001_initial'), ] operations = [ migrations.RenameModel( old_name='Rename1', new_name='Rename2', ), ] }}} But when this migration is reversed, the error is raised: `ValueError: The field two.Related2.rename1 was declared with a lazy reference to 'one.rename1', but app 'one' doesn't provide model 'rename1'.` It's unclear from the error message how I'd even go about attempting to address this problem, and the docs don't mention anything about handling this case (as far as I can tell). Expected behaviour is to be able to handle this reverse-rename seamlessly, or at least provide a sensible error message if this operation is unsupported. Naively it looks like the problem is that the `two.Related2` model has not been given its own migration when its ForeignKey was changed from `one.Rename1` to `one.Rename2`, instead that change is tracked implicitly and incorrectly in the RenameModel step. -- Ticket URL: <https://code.djangoproject.com/ticket/28056> 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/054.207f8fc1ebb6e97b0c655f66f8977eef%40djangoproject.com. For more options, visit https://groups.google.com/d/optout.