#34250: Duplicate model names in M2M relationship causes RenameModel migration
failure
-------------------------------------+-------------------------------------
               Reporter:  Zac        |          Owner:  nobody
  Miller                             |
                   Type:  Bug        |         Status:  new
              Component:  Database   |        Version:  4.1
  layer (models, ORM)                |
               Severity:  Normal     |       Keywords:  RenameModel
           Triage Stage:             |      Has patch:  0
  Unreviewed                         |
    Needs documentation:  0          |    Needs tests:  0
Patch needs improvement:  0          |  Easy pickings:  0
                  UI/UX:  0          |
-------------------------------------+-------------------------------------
 Example code is here: https://github.com/jzmiller1/edemo

 I have a django project with two apps, incidents and vault, that both have
 a model named Incident.  The vault Incident model has an M2M involving the
 incidents Incident model.  When the table is created for this M2M
 relationship the automatic field names are "from_incident_id" and
 "to_incident_id" since models have the same names.

 If I then try to use a RenameModel in a migration...


 {{{
     operations = [
         migrations.RenameModel(
             old_name='Incident',
             new_name='Folder',
         ),
     ]
 }}}


 it fails with this traceback:


 {{{
 Tracking file by folder pattern:  migrations
 Operations to perform:
   Apply all migrations: admin, auth, contenttypes, incidents, sessions,
 vault
 Running migrations:
   Applying vault.0002_rename_incident_folder...Traceback (most recent call
 last):
   File "/Users/zacmiller/PycharmProjects/virtualenvs/edemo/lib/python3.10
 /site-packages/django/db/models/options.py", line 668, in get_field
     return self.fields_map[field_name]
 KeyError: 'incident'

 During handling of the above exception, another exception occurred:

 Traceback (most recent call last):
   File "/Users/zacmiller/Library/Application
 
Support/JetBrains/Toolbox/apps/PyCharm-P/ch-0/222.4345.23/PyCharm.app/Contents/plugins/python/helpers/pycharm/django_manage.py",
 line 52, in <module>
     run_command()
   File "/Users/zacmiller/Library/Application
 
Support/JetBrains/Toolbox/apps/PyCharm-P/ch-0/222.4345.23/PyCharm.app/Contents/plugins/python/helpers/pycharm/django_manage.py",
 line 46, in run_command
     run_module(manage_file, None, '__main__', True)
   File
 "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/runpy.py",
 line 209, in run_module
     return _run_module_code(code, init_globals, run_name, mod_spec)
   File
 "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/runpy.py",
 line 96, in _run_module_code
     _run_code(code, mod_globals, init_globals,
   File
 "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/runpy.py",
 line 86, in _run_code
     exec(code, run_globals)
   File "/Users/zacmiller/PycharmProjects/edemo/manage.py", line 22, in
 <module>
     main()
   File "/Users/zacmiller/PycharmProjects/edemo/manage.py", line 18, in
 main
     execute_from_command_line(sys.argv)
   File "/Users/zacmiller/PycharmProjects/virtualenvs/edemo/lib/python3.10
 /site-packages/django/core/management/__init__.py", line 446, in
 execute_from_command_line
     utility.execute()
   File "/Users/zacmiller/PycharmProjects/virtualenvs/edemo/lib/python3.10
 /site-packages/django/core/management/__init__.py", line 440, in execute
     self.fetch_command(subcommand).run_from_argv(self.argv)
   File "/Users/zacmiller/PycharmProjects/virtualenvs/edemo/lib/python3.10
 /site-packages/django/core/management/base.py", line 402, in run_from_argv
     self.execute(*args, **cmd_options)
   File "/Users/zacmiller/PycharmProjects/virtualenvs/edemo/lib/python3.10
 /site-packages/django/core/management/base.py", line 448, in execute
     output = self.handle(*args, **options)
   File "/Users/zacmiller/PycharmProjects/virtualenvs/edemo/lib/python3.10
 /site-packages/django/core/management/base.py", line 96, in wrapped
     res = handle_func(*args, **kwargs)
   File "/Users/zacmiller/PycharmProjects/virtualenvs/edemo/lib/python3.10
 /site-packages/django/core/management/commands/migrate.py", line 349, in
 handle
     post_migrate_state = executor.migrate(
   File "/Users/zacmiller/PycharmProjects/virtualenvs/edemo/lib/python3.10
 /site-packages/django/db/migrations/executor.py", line 135, in migrate
     state = self._migrate_all_forwards(
   File "/Users/zacmiller/PycharmProjects/virtualenvs/edemo/lib/python3.10
 /site-packages/django/db/migrations/executor.py", line 167, in
 _migrate_all_forwards
     state = self.apply_migration(
   File "/Users/zacmiller/PycharmProjects/virtualenvs/edemo/lib/python3.10
 /site-packages/django/db/migrations/executor.py", line 252, in
 apply_migration
     state = migration.apply(state, schema_editor)
   File "/Users/zacmiller/PycharmProjects/virtualenvs/edemo/lib/python3.10
 /site-packages/django/db/migrations/migration.py", line 130, in apply
     operation.database_forwards(
   File "/Users/zacmiller/PycharmProjects/virtualenvs/edemo/lib/python3.10
 /site-packages/django/db/migrations/operations/models.py", line 422, in
 database_forwards
     old_m2m_model._meta.get_field(old_model._meta.model_name),
   File "/Users/zacmiller/PycharmProjects/virtualenvs/edemo/lib/python3.10
 /site-packages/django/db/models/options.py", line 670, in get_field
     raise FieldDoesNotExist(
 django.core.exceptions.FieldDoesNotExist: Incident_incidents has no field
 named 'incident'
 }}}

-- 
Ticket URL: <https://code.djangoproject.com/ticket/34250>
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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/010701859d591eac-ec5248d8-418d-4e70-8681-9718f71a9c2d-000000%40eu-central-1.amazonses.com.

Reply via email to