1

我有一个 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)

明明有东西要迁移,为什么还要说“没什么可迁移”?

4

1 回答 1

7

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

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
于 2013-06-05T15:13:44.577 回答