我正在尝试重命名我的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
希望它更有意义!
我认为在将应用重命名为beta之前,您已经运行了名为version_1.0001_initial的迁移。您只需更新表django_migrations中的数据库记录,并使用以下SQL语句将旧应用程序迁移重命名为新名称:
UPDATE django_migrations SET app = 'beta' WHERE app = 'version_1';
在我的情况下,当我检查django_migrations
表的内容时,我可以确认这个InconsistentMigrationHistory
例外试图提出的问题。因此,一个0001_initial
记录的依赖应用程序的应用迁移没有“独立”的记录。
我甚至到了我试图运行django-admin migrate
的应用程序名称无关紧要的地步。这让我相信在实际进行任何迁移操作之前,桌子上会发生某种形式的健全性检查。
删除数据库记录并首先为依赖项调用migrate
子命令将删除该块。两者都需要--fake-initial
旗,因为所有的Model
s都已经存在。
对于它的价值,如果它能帮助处于类似情况的任何人:
将正确的数据库从生产服务器复制到测试实例,模拟其上的数据时,我遇到了这个问题,所以我知道数据库是正确的。我没有深入研究为什么这会使迁移脱节,但是(并且我想强调我可以轻松地对此进行试验,因为我备份了数据)只是清空django_migrations
表并运行python manage.py migrations <app_name> --fake
为我解决了它。