在Django-South: 我改变了我已成功运行myapp的初始迁移但出于某种原因,在我对模型进行了更改并转到
之后./manage.py schemamigration myapp --auto
./manage.py migrate myapp
我得到了很多追溯,结尾于:
(1050, "Table 'my_table' already exists")
经过大量的谷歌搜索后,我发现并尝试了这个:
./manage.py migrate myapp --fake
然后我继续迁移它,但无济于事;同样的错误。
有什么建议吗?
答案 0 :(得分:7)
我刚收到同样的错误,并通过搜索找到了这个问题。
我的问题是我使用--initial
标志创建的第二次迁移,即
$ ./manage.py startapp foo
$ ./manage.py schemamigration --initial foo
$ ./manage.py migrate foo
...对foo进行一些更改...
$ ./manage.py schemamigration --initial foo
(糟糕!)
$ ./manage.py migrate foo
...我收到错误,迁移失败,因为在第二次迁移中,South正在尝试创建已创建的表。
在我的迁移文件夹中:
$ ls foo/migrations
0001_initial.py 0002_initial.py
删除第二次迁移并使用正确的--auto
标记重新导出第二次迁移:
$ rm foo/migrations/0002_initial.py
$ ./manage.py schemamigration --auto foo
$ ./manage.py migrate foo
成功!
可能还有其他因素会导致此错误,但这是我的错误!
答案 1 :(得分:4)
它是现有应用吗?
在这种情况下,除了假位之外,你还需要转换它。
有关转换现有应用的好文档here。
虽然如果你不知道它们已经在哪里,它们是非常棘手的(;
在向已安装的应用添加南方之后进行转换:
./manage.py syncdb
./manage.py convert_to_south myapp
./manage.py migrate myapp 0001 --fake
答案 2 :(得分:0)
如果其中一个案例发生了这个问题:
1)你做了#34; schemamigration app_name --initial"一个是" - auto" 2)您中断了上次迁移。
要解决此类问题,请应用以下内容:
1)将您上次的架构迁移标记为虚假。
python manage.py schemamigration app_name --fake
注意:确保模型的架构与数据库中的表的架构相同。
2)通过执行
再次应用迁移python manage.py schemamigration app_Name --auto
python manage.py migrate app-Name
注意:有时您可以使用以下语法添加手动您已添加的特定字段。
python manage.py schemamigration app_name --add-field My_model.added_field
了解更多信息。关于南方,您可以查看其文档here。