Django: Переименование моделей, таблица M2M не переименовывается
TLDR: Модели перенесены в новое приложение. После переноса отношение M2M ссылается на несуществующую таблицу. Предыдущая таблица M2M не была переименована.
Django Version: 3.2.3
Сценарий:
Я занимаюсь рефакторингом приложения Django. В этом процессе я перенес некоторые модели в новое приложение. Для этого я переименовал таблицы, как описано Хаки Бенитой , используя SeparateDatabaseAndState
.
Одна из моделей Students
в новом приложении имеет поле с отношением Many2Many к другой модели Teachers
(которую я также перенес в новое приложение).
oldapp/migrations/000X_auto_XXX.py
operations = [
...
migrations.SeparateDatabaseAndState(
state_operations=[
migrations.DeleteModel(
name='Students',
)
],
database_operations=[
migrations.AlterModelTable(
name='Students',
table='newapp_students'
)
]
),
migrations.SeparateDatabaseAndState(
state_operations=[
migrations.DeleteModel(
name='Teachers',
)
],
database_operations=[
migrations.AlterModelTable(
name='Teachers',
table='newapp_Teachers'
)
]
),
...
]
newapp/migrations/0001_initial.py
operations = [
...
migrations.SeparateDatabaseAndState(
state_operations=[
migrations.CreateModel(
name='Teacher',
fields=[...],
options={...},
)
],
database_operations=[]
),
migrations.SeparateDatabaseAndState(
state_operations=[
migrations.CreateModel(
name='Students',
fields=[
...
('teachers', models.ManyToManyField(blank=True,related_name='students', to='newapp.Teachers')),
...
],
options={...},
)
],
database_operations=[]
),
...
]
После выполнения python manage.py migrate
все модели были переименованы (пока все хорошо)...
Проблема: Автоматически созданная таблица для Many2Many не была переименована (oldapp_students_teachers
). Однако модель в новом приложении ссылается на несуществующую таблицу в новом приложении (newapp_students_teachers
).
Я провел небольшое исследование и, похоже, что эта проблема была решена и исправлена несколько лет назад 41b337efa085b6b9cfdb2cf724d977005ff77e75.
Однако для меня проблема все еще остается. Так что же я делаю не так?