Django重命名App和迁移

Tou*_*ami 3 migration django database-migration

我有名为“ app1”的django应用,其中包含模型和迁移文件。我将此应用程序重命名为“ app2”,并修复了所有导入,URL ...但是我在迁移表中的文件和数据时遇到问题。如何以正确的方式编写迁移,以确保:-新安装=>创建新表-更新旧版本=>创建新表,移动数据,删除旧表

PS:有很多FK的几张桌子。

这是我的进度,我不确定自己是否处于良好状态:-删除了所有旧的迁移-makemigrations以生成新的迁移文件

经过这两个步骤,我可以安装我的应用程序,但是旧版本仍然有问题。

问题:迁移数据的最佳方法是什么?

PS:我不使用南方。

Tou*_*ami 7

我找到了可行的解决方案

1-使用新的FK和新的应用程序依赖性修复旧的迁移

2-强制旧迁移使用旧应用名称创建表,因此对于该inn迁移。CreateModel.options,添加'db_table:'app1_table_name'

3-在每个迁移文件中添加替换= [('app1','migration_file_name')]。这将告诉django当前迁移(app2.migration_file_name)将替换旧文件,这将防止django执行两次迁移

4-使用migrations.AlterModelTable创建重命名表的迁移文件

  • 除此之外,我发现 django 在使用此方法重命名应用程序时不会更新内容类型,而是会在运行迁移时为每个应用程序模型创建新的内容类型(和权限)。如果您使用通用外键等,这将导致麻烦。我通过在所有“AlterModelTable”之前添加“RunPython”操作来解决此问题。我的 `RunPython` 函数运行 `ContentType = apps.get_model('contenttypes', 'ContentType')` `ContentType.objects.filter(app_label='old_app').update(app_label='new_app')` (4认同)