成功进行模式迁移后,南方“无需迁移”消息

时间:2013-06-05 15:03:16

标签: python django heroku django-south

我有一个Django应用程序,我添加了South,执行了一些迁移,并在我的本地计算机上按预期运行。但是,在将项目推送到Heroku后,我只有数据库错误。

在尝试处理我遇到的一个数据库错误时,我尝试了一个测试,删除了我的一个模型,将编辑过的模型文件推送到Heroku并运行:

heroku run python manage.py schemamigration django_app test_remove_pub --auto

这似乎工作正常。我收到了消息:

Running `python manage.py schemamigration apricot_app test_remove_pub --auto` attached   
to terminal... up, run.6408
 - Deleted model django_app.Publication
 - Deleted M2M table for journalists on django_app.Publication
 - Deleted M2M table for tags on apricot_app.Publication
Created 0006_test_remove_pub.py. You can now apply this migration with: ./manage.py   
migrate django_app

所以,South似乎做了我所期望的一切 - 它删除了我的模型及其多对多的关系,并制作了相应的迁移文件。接下来,我输入:

 heroku run python manage.py migrate django_app

我回来了:

Running `python manage.py migrate django_app` attached to terminal... up, run.4792  
Running migrations for django_app:
- Nothing to migrate.
- Loading initial data for django_app.
Installed 0 object(s) from 0 fixture(s)

为什么在显然有迁移的东西时会说“无需迁移”?

1 个答案:

答案 0 :(得分:8)

更改模型后,您需要执行以下操作:

heroku run python manage.py schemamigration django_app --auto

如果有任何改变

然后运行

heroku run python manage.py migrate django_app

South根据此数据库表中的条目应用迁移:south_migrationhistory。因此,如果您想手动覆盖它,

  1. 删除您更改的模型列app_name的所有条目
  2. 手动删除所有相关表格。您可以通过在django shell中输入以下内容来获取所有表的列表:

    from django.db.models import get_app, get_models
    app = get_app(app_name)
    for model in get_models(app, include_auto_created=True):
        print model._meta.db_table
    
  3. 删除与应用相关的migrations/文件夹

  4. 进行全新迁移:./manage.py schemamigration app_name --initial
  5. 应用迁移./manage.py migrate app_name
相关问题