Django如何恢复上次迁移?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (309)

已经进行了一个迁移,它添加了一个新表,并且希望还原它并删除迁移,而不创建新的迁移。

该怎么做?是否有一个命令来还原上次迁移,然后我可以简单地删除迁移文件?

提问于
用户回答回答于

如果你有一个RunPython操作,那么可能只想退出迁移,而不编写逻辑上严格的反转脚本。

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import migrations, models

def forwards_func(apps, schema_editor):
    # We get the model from the versioned app registry;
    # if we directly import it, it'll be the wrong version
    Country = apps.get_model("myapp", "Country")
    db_alias = schema_editor.connection.alias
    Country.objects.using(db_alias).bulk_create([
        Country(name="USA", code="us"),
        Country(name="France", code="fr"),
    ])

class Migration(migrations.Migration):

    dependencies = []

    operations = [
        migrations.RunPython(forwards_func, lambda apps, schema_editor: None),
    ]

这适用于Django 1.8,1.9

用户回答回答于

可以通过迁移到以前的迁移来恢复。

例如,如果最后两次迁移是:

  • 0010_previous_migration
  • 0011_migration_to_revert

那你就会:

./manage.py migrate my_app 0010_previous_migration 

然后可以删除迁移。0011_migration_to_revert...

如果使用Django 1.8+,则可以显示所有迁移的名称。

./manage.py showmigrations my_app

要逆转应用程序的所有迁移,可以运行:

./manage.py migrate my_app zero

扫码关注云+社区

领取腾讯云代金券