我试图重命名我的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
希望它更有意义!
答案 0 :(得分:5)
我认为在将应用重命名为测试版之前,您已经运行了名为 version_1.0001_initial 的迁移。您只需更新表 django_migrations 中的数据库记录,并使用以下SQL语句将旧应用程序迁移重命名为新名称:
UPDATE django_migrations SET app = 'beta' WHERE app = 'version_1';
答案 1 :(得分:0)
在我的情况下,当我检查django_migrations
表的内容时,我可以确认此InconsistentMigrationHistory
异常试图引发的问题。因此,依赖应用程序的应用迁移的0001_initial
记录为"独立"之一。
我甚至认为我试图在上运行django-admin migrate
的应用程序的名称不重要。这使我相信在实际进行任何迁移操作之前,桌面上会发生某种完整性检查。
删除数据库记录并首先调用依赖项的migrate
子命令将删除该块。两者都需要--fake-initial
标记,因为所有Model
已经存在。
答案 2 :(得分:0)
对于它的价值,以及它是否有助于处于类似情况的任何人:
将正确的数据库从生产服务器复制到测试实例时,我遇到了这个问题,以模拟其上的数据,因此我知道数据库是正确的。我没有详细说明为什么这会使迁移过时,但是(我想强调我可以轻松地对此进行实验,因为我已备份数据)只是清空{ {1}}表并运行django_migrations
为我解决了这个问题。