我在南方与我的django项目合作时遇到了麻烦,我已经按照南方文档将应用程序转换为南方并且也在这里查看(Why don't my south migrations work?),但都是徒劳的。
向南添加INSTALLED_APPS
并运行syncdb
,
Synced:
> django.contrib.messages
> django.contrib.staticfiles
> smartmin
> nsms.console
> django_extensions
> pagination
> restaurant_detail
> live
> debug_toolbar
> orders
> django.contrib.admindocs
Not synced (use migrations):
- django.contrib.auth
- django.contrib.contenttypes
- django.contrib.sessions
- django.contrib.sites
- guardian
- south
- django_quickblocks
- rapidsms
- rapidsms_httprouter
- sorl.thumbnail
- djangoratings
- agon_ratings
- django.contrib.admin
(use ./manage.py migrate to migrate these)
此时我执行此命令python manage.py migrate
,这会导致错误django.db.utils.DatabaseError: relation "south_migrationhistory" does not exist
LINE 1: ...gration", "south_migrationhistory"."applied" FROM "south_mig...
我在这做错了什么?
答案 0 :(得分:13)
如果这是您的第一次迁移,或者您只是想重新开始:
rm -Rf your_app/migrations/
python manage.py syncdb --migrate
下一次迁移需要:
python manage.py schemamigration your_app --auto
python manage.py migrate your_app
这对我有用:)
答案 1 :(得分:4)
这一切都是因为我的site_packages
中的南方已经有一个迁移目录,我不知道那里有。当我摆脱目录时,一切正常。
为那些因为我缺乏思想而引起的问题而苦苦挣扎的stackoverflow人员致歉。
答案 2 :(得分:2)
可以通过遵循良好意义建议来创建此问题:如果您在调试尝试的任何时候尝试python manage.py schemamigration south --initial
,您将在南方应用程序本身的站点包中创建“迁移”文件夹。遗憾的是,migrations
文件夹的存在是South在执行其更改的syncdb进程时如何确定是否应该跳过应用程序。包括该应用程序......是否为南方。
当您从数据库中删除数据库以尝试从头开始调试时,South的已修改的syncdb将跳过创建south_migrationhistory
表,假设迁移文件夹将更好地了解,并且迁移表需要south_migrationhistory
表工作。
解决问题:
migrations/
文件夹。 python ./manage.py syncdb
通过pip卸载/重新安装南方实际上不会切断它,因为它会使违规文件夹保持不变。
或者,Marius Grigaitis提出了针对同一错误的解决方法,尽管当时它归因于南方错误。
答案 3 :(得分:1)
您必须首先向南迁移以创建南表,然后您可以迁移其他应用程序:
# python manage.py migrate south
# python manage.py migrate
答案 4 :(得分:0)
似乎没有在您的数据库中创建迁移表。这可能会有点奇怪:
python manage.py schemamigration south --initial
python manage.py migrate south
然后继续进行其他迁移。