首页 > 解决方案 > 如何确保在将数据从这些列迁移到另一个表之前完成用于删除列的 django 迁移

问题描述

我在 Dajngo 有 2 个应用程序,A 和 B,每个都有自己的模型。

我负责将一些字段/列从 A 的模型移动到 B 的任务

前:

class Amodel:
    fieldA = models.BooleanField(....
    fieldB = models.....
    fieldC = ........

class Bmodel:
    fieldD = models......

后:

class Amodel:
    fieldC = ........

class Bmodel:
    fieldA = models.BooleanField(....
    fieldB = models.....
    fieldD = models......

我如何构建这个示例有点令人困惑,但是 Amodel 和 Bmodel 在不同的应用程序中

我设置了 2 个迁移文件,一个在 B 中用于在表中添加新列并从 A 迁移数据,另一个在 A 中以删除这些字段

当我运行测试时,在 B 的数据迁移之前触发了 A 的删除。我该如何处理?

对于一些可能相关的信息:

Django: 1.11
Postgres: 9.5

标签: djangopython-2.7django-models

解决方案


让我们看看整个过程:

  • 您添加新字段Bmodel并为该 ( app_b/migrations/0001_new_fields.py)生成迁移

  • 现在,您想要进行数据迁移以将数据从 Amodel 移动到 Bmodel ( app_a/migrations/0001_fancy_data_migration.py)。

    为此,我们将设置以下依赖项:

    dependencies = [
        ('app_b', '0001_new_fields'),
    ]
    

    确保它只会在我们添加新字段后运行。

  • 由于我们迁移了所有重要数据,我们准备从Amodel. 我们将删除它们并生成相应的迁移 ( app_a/migrations/0002_drop_fields.py)。

    这次,此迁移的依赖项将如下所示:

     dependencies = [
         ('app_a', '0001_fancy_data_migraiton'),
     ]
    

推荐阅读