Django - 外部应用程序的Datamigration

ste*_*ett 7 migration django data-migration

有没有办法正确创建第三方Django应用程序的数据迁移?

运行python manage.py makemigrations --empty <externa-app-label>工作,但在应用程序的目录中创建迁移(在虚拟环境中...不想搞砸).


这是我的情况:

我需要用具有类似功能的外部应用程序替换Django项目的一个内部应用程序,然后删除旧的内部应用程序.这些应用程序具有模型,并且项目的现有数据库需要迁移.如果我以后不打算删除它,我会将数据迁移与旧应用程序关联起来.

一个更简单的示例需要这样的东西可能只需要用一些初始数据填充第三方应用程序.

frn*_*nhr 2

只需将数据迁移创建为其他内部应用程序之一的一部分,然后在那里进行数据操作(甚至可能为此目的创建一个临时应用程序?)

重要的一点是在数据迁移文件中添加新的依赖项。类似这样,但当然会在extenralapp/migrations目录中查找最新的迁移名称(如果在 中覆盖,则在其他目录中查找settings.MIGRATION_MODULES)。

class Migration(migrations.Migration):

    dependencies = [
        ('yourapp', '0004_auto_20151216_1509'),
        ('externalapp', '0011_20010203_1415'),  # this line
    ]

    ...
Run Code Online (Sandbox Code Playgroud)

相关的事情...

如果使用ContentTypeand/orauth.Permission模型,您可能会在尝试获取它们时遇到问题。这两个模型都是在成功命令结束时创建的manage.py migrate

在这种情况下,很可能您的迁移本身可以正常运行,但如果您一次性运行所有迁移(即在干净的数据库上),则会失败。有关详细信息和解决方法,请参阅#23422 无法在数据迁移中向组添加权限

  • 我有同样的问题,当我按照这个答案的建议进行操作时,该操作尝试在“yourapp”模型而不是“externalapp”模型上发生,并生成错误。例如,如果我想向 shop_productvariation 表添加一个字段(即 shop 模块中的 Productvariation 模型,其中“shop”将是本例中的“externalapp”),我会收到一条错误,提示 KeyError: ('yourapp', “产品变化”)。我正在使用 Django 1.8。我似乎无法让它在“externalapp”模块上运行,除非我将迁移实际放入外部应用程序的迁移文件夹中。 (4认同)