更改django应用程序名称

时间:2016-06-04 07:10:52

标签: python mysql django rename

我试图重命名我的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

希望它更有意义!

3 个答案:

答案 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为我解决了这个问题。