使用 --fake 后如何在 django 1.8 上重做迁移

Posted

技术标签:

【中文标题】使用 --fake 后如何在 django 1.8 上重做迁移【英文标题】:How to redo a migration on django 1.8 after using --fake 【发布时间】:2015-08-18 01:32:06 【问题描述】:

我的迁移出了点问题,我向模型添加了一个新的日期时间字段,然后我使用了 makemigrations 并进行了迁移。

python manage.py makemigrations
python manage.py migrate

但在此之后,迁移出现“表已存在错误”。我想我可以伪造迁移并重新开始,所以我做到了

python manage.py makemigrations --fake core

Operations to perform:
  Apply all migrations: core
Running migrations:
  Rendering model states... DONE
  Applying core.0001_initial... FAKED
  Applying core.0002_auto_20150525_1331... FAKED
  Applying core.0003_auto_20150525_1348... FAKED
  Applying core.0004_processo_data_atualizacao... FAKED

但是我刚刚创建的新迁移也是伪造的(当然!)。

执行此操作后重做迁移(在本例中为 core.0004)的正确方法是什么?

【问题讨论】:

在南方,可以通过您想要迁移到的特定步骤。然后它将向前或向后迁移,直到给定步骤之后。当他们将其合并到 Django 中时,该功能是否被删除? @spectras 不,不是,完全一样 【参考方案1】:

您应该首先使用 --fake 将当前状态设置为 0003(假设 0003 是您真正应用的最后一个迁移):

python manage.py migrate --fake core 0003

然后照常进行:

python manage.py migrate core

相关文档:https://docs.djangoproject.com/en/dev/ref/django-admin/#migrate

【讨论】:

如果这是我第一次使用 --fake 的迁移呢? @EvyatarSivan 你应该使用zero 而不是迁移号码,例如python manage.py migrate --fake core zero 另见--fake-initial标志docs.djangoproject.com/en/1.8/topics/migrations/…。 仅供参考如果您使用zero 而不是迁移编号,您将丢失该表中的所有数据 请注意core 是应用程序的名称

以上是关于使用 --fake 后如何在 django 1.8 上重做迁移的主要内容,如果未能解决你的问题,请参考以下文章

修改 Django 迁移文件,或使用 --fake 标志?

--fake-initial vs --fake 在 Django 迁移中?

如何解决Django 1.8在migrate时失败

如何在 ubuntu 14.04 上使用 nginx 和 gunicorn 部署 django 1.8 应用程序

即使使用“--fake”,Django 迁移缓慢且资源密集

如何解决Django 1.8在migrate时失败