TLDR: 模型已移至新应用程序。迁移后,M2M关系引用不存在的表。以前的M2M表未被重命名。
Django版本:3.2.3
场景:
我正在重构Django应用程序。在此过程中,我将一些模型移动到了一个新应用程序中。为此,我使用
新应用程序中的一个模型
在运行
问题:自动生成的Many2Many表没有被重命名(
我做了一些研究,似乎这个问题已经在几年前得到了解决和修复41b337efa085b6b9cfdb2cf724d977005ff77e75。
然而,对我来说问题仍然存在。那么我做错了什么?
SeparateDatabaseAndState
对表进行了重命名,如由Haki Benita描述。新应用程序中的一个模型
Students
有一个与另一个模型Teachers
(我也将其移动到了新应用程序中)具有Many2Many关系的字段。
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。
然而,对我来说问题仍然存在。那么我做错了什么?
migrations.AlterModelTable
之前,有可能在迁移中删除M2M。如果您首先删除模型,然后运行makemigrations,这种情况会在自动生成的迁移中发生。 - undefined