我怎样才能让我的南迁移工作?

时间:2013-04-22 10:19:16

标签: django migration django-south

我在南方与我的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... 我在这做错了什么?

5 个答案:

答案 0 :(得分:13)

如果这是您的第一次迁移,或者您只是想重新开始:

  1. 删除并创建当前数据库
  2. 删除迁移目录:rm -Rf your_app/migrations/
  3. 只需一个命令即可同步和迁移:python manage.py syncdb --migrate
  4. 下一次迁移需要:

    1. python manage.py schemamigration your_app --auto
    2. python manage.py migrate your_app
    3. 这对我有用:)

答案 1 :(得分:4)

这一切都是因为我的site_packages中的南方已经有一个迁移目录,我不知道那里有。当我摆脱目录时,一切正常。 为那些因为我缺乏思想而引起的问题而苦苦挣扎的stackoverflow人员致歉。

答案 2 :(得分:2)

可以通过遵循良好意义建议来创建此问题:如果您在调试尝试的任何时候尝试python manage.py schemamigration south --initial,您将在南方应用程序本身的站点包中创建“迁移”文件夹。遗憾的是,migrations文件夹的存在是South在执行其更改的syncdb进程时如何确定是否应该跳过应用程序。包括该应用程序......是否为南方。

当您从数据库中删除数据库以尝试从头开始调试时,South的已修改的syncdb将跳过创建south_migrationhistory表,假设迁移文件夹将更好地了解,并且迁移表需要south_migrationhistory表工作。

解决问题:

  1. 进入您的网站包并删除南方应用中的migrations/文件夹。
  2. 最后一次运行python ./manage.py syncdb
  3. 通过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

然后继续进行其他迁移。