【问题标题】:Remove app reference after model dependencies were added添加模型依赖项后删除应用程序引用
【发布时间】:2016-07-16 02:15:39
【问题描述】:

我有一个使用外部应用引用的 django 应用。我们不再需要此应用程序引用,因此我们要删除依赖项。我能够生成迁移以删除我们要删除的应用程序中模型的外键,但我无法删除应用程序中的需求引用,因为它在早期的迁移中被引用。

有没有人有一个已知的解决方案来删除这样的应用程序要求?

举个例子,假设我有一个具有以下模型的外部应用程序:

class ExternalInfo(models.Model):
    random_field = CharField()

在您的项目申请中,您有一个客户记录:

class Customer(models.Model):
    name = CharField()
    external_info = ForegnKey(external_app.ExternalInfo, null=True)

应用程序的迁移 0001 在外部应用程序中创建模型的外键。 10 个月过去了,10 次迁移之后,您需要从客户模型中删除 external_info,并且您希望从项目中删除 external_app。如何在不中断旧迁移的情况下删除此依赖项?

【问题讨论】:

    标签: django-models django-migrations


    【解决方案1】:

    好的,所以我的解决方法是按顺序执行以下步骤:

    1. 生成将从客户模型中删除 external_info 列的迁移脚本
    2. 删除了所有引用该字段的代码
    3. 修改了 0001 迁移以将外键字段创建为 0001 迁移之前存在的不同模型
    4. 从 pip 要求中删除了该应用并安装了应用

    按照这些步骤升级现有数据库和从头开始构建都会产生相同的数据库架构。 (不包括我现在需要找到一种方法来摆脱应用程序创建的表,有人对最佳方法有想法吗?我正在考虑编写一个 migrations.RunSql 来删除这些表,但它们不会在新版本中存在创建数据库)

    【讨论】:

    • 你能解释一下step3吗?
    • 基本上我将迁移历史重写为模块中未包含的表,这使我能够成功删除依赖项
    猜你喜欢
    • 2011-04-29
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    相关资源
    最近更新 更多