我有一个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)
为什么在显然有迁移的东西时会说“无需迁移”?
答案 0 :(得分:8)
更改模型后,您需要执行以下操作:
heroku run python manage.py schemamigration django_app --auto
如果有任何改变
然后运行
heroku run python manage.py migrate django_app
South根据此数据库表中的条目应用迁移:south_migrationhistory
。因此,如果您想手动覆盖它,
app_name
的所有条目手动删除所有相关表格。您可以通过在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
删除与应用相关的migrations/
文件夹
./manage.py schemamigration app_name --initial
./manage.py migrate app_name