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

jac*_*300 2 python django heroku django-south

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

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

heroku run python manage.py schemamigration django_app test_remove_pub --auto
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

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

 heroku run python manage.py migrate django_app
Run Code Online (Sandbox Code Playgroud)

我回来了:

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)
Run Code Online (Sandbox Code Playgroud)

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

kar*_*ikr 8

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

heroku run python manage.py schemamigration django_app --auto
Run Code Online (Sandbox Code Playgroud)

如果有什么变化的话

然后跑

heroku run python manage.py migrate django_app
Run Code Online (Sandbox Code Playgroud)

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
    
    Run Code Online (Sandbox Code Playgroud)
  3. 删除migrations/与应用程序相关的文件夹

  4. 做一个新的迁移: ./manage.py schemamigration app_name --initial
  5. 应用迁移 ./manage.py migrate app_name