在将数据从那些列迁移到另一个表之前,如何确保已完成删除列的django迁移

时间:2019-04-24 20:57:01

标签: django python-2.7 django-models

我在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位于不同的应用程序中

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

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

某些可能相关的信息:

Django: 1.11
Postgres: 9.5

1 个答案:

答案 0 :(得分:1)

让我们看看整个过程:

  • 您在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'),
     ]