更改django应用程序名称时不一致的迁移历史记录

问题描述 投票:4回答:3

我正在尝试重命名我的django网站中的一个应用程序。有另一个应用程序依赖于它及其mysql表。我查看了两个应用程序中的所有文件,并将旧名称的实例更改为新名称。

但是,现在我在尝试执行迁移时遇到此错误消息:

File "/Users/Limor/anaconda/lib/python2.7/site-packages/Django-1.10a1-py2.7.egg/django/db/migrations/loader.py", line 287,
 in check_consistent_history
    migration[0], migration[1], parent[0], parent[1],
django.db.migrations.exceptions.InconsistentMigrationHistory: 
  Migration manual_tasks.0001_initial is applied before its dependency beta.0001_initial

我找不到这个问题的解决方案,如果我试图注释掉引发异常的特定功能,我会遇到相关的问题。我注定了,还是有办法解决它?

谢谢!

编辑:

旧的名称是version_1,新的是beta版,另一个依赖它的应用程序是manual_tasks。

这是代码的结构:

~/website/
|-- .ebextensions
|   `-- django.config
|-- project
|   |-- __init__.py
|   |-- local_settings.py
|   |-- settings.py
|   |-- urls.py
|   `-- wsgi.py
|-- db.sqlite3
|-- manage.py
|--beta
|   |-- __init__.py
|   |-- admin.py
|   |-- apps.py
|   |-- local_settings.py
|   |-- models.py
|   |-- tests.py
|   |-- urls.py
|   |-- views.py
|   |-- migrations
|       |-- __init__.py
|       |-- 0001__initial.py
|   |-- static
|       |-- assets
|       |-- images
|   |-- templates
|--manual_tasks
|   |-- __init__.py
|   |-- admin.py
|   |-- apps.py
|   |-- models.py
|   |-- tests.py
|   |-- urls.py
|   |-- views.py
|   |-- migrations
|       |-- __init__.py
|       |-- 0001__initial.py
|   |-- static
|       |-- assets
|       |-- images
|   |-- templates
`-- requirements.txt

希望它更有意义!

python mysql django rename
3个回答
5
投票

我认为在将应用重命名为beta之前,您已经运行了名为version_1.0001_initial的迁移。您只需更新表django_migrations中的数据库记录,并使用以下SQL语句将旧应用程序迁移重命名为新名称:

UPDATE django_migrations SET app = 'beta' WHERE app = 'version_1';

0
投票

在我的情况下,当我检查django_migrations表的内容时,我可以确认这个InconsistentMigrationHistory例外试图提出的问题。因此,一个0001_initial记录的依赖应用程序的应用迁移没有“独立”的记录。

我甚至到了我试图运行django-admin migrate的应用程序名称无关紧要的地步。这让我相信在实际进行任何迁移操作之前,桌子上会发生某种形式的健全性检查。

删除数据库记录并首先为依赖项调用migrate子命令将删除该块。两者都需要--fake-initial旗,因为所有的Models都已经存在。


0
投票

对于它的价值,如果它能帮助处于类似情况的任何人:

将正确的数据库从生产服务器复制到测试实例,模拟其上的数据时,我遇到了这个问题,所以我知道数据库是正确的。我没有深入研究为什么这会使迁移脱节,但是(并且我想强调我可以轻松地对此进行试验,因为我备份了数据)只是清空django_migrations表并运行python manage.py migrations <app_name> --fake为我解决了它。

© www.soinside.com 2019 - 2024. All rights reserved.