我遇到了评论者提出的同样问题:Django South - table already exists
没有后续行动,所以我想我会发一个新问题 . 我有一个Django应用程序,我在南方管理它的迁移 . 我在模型中添加了一个字段然后运行
./manage schemamigration my_app --auto
按预期运行 . 运行
./manage migrate my_app
但是,导致错误,表明与我更改的模型关联的表已经存在 . 这导致我上面的链接问题,所以运行
./manage migrate my_app --fake
解决了表错误,但现在我收到一个Django错误,表明与新字段关联的列不存在 .
./manage sqlall my_app
显示架构符合预期 .
任何关于如何补救这一点的想法都表示赞赏!
2 回答
可能最简单的方法是从头开始迁移 .
删除您尝试修复的应用的所有
migrations/*
文件 . 将models.py
恢复到数据库中当前的状态(借助版本控制工具,或只注释掉新字段) . 然后初始化迁移:这将创建迁移当前数据库结构的记录 .
现在将您的更改添加到
models.py
,现在南方将更改内容:需要注意的其他事项:如果在
ForeignKey
关系中使用default
值,并且向该FK模型添加字段,则通常会出现此错误(DatabaseError: no such column: appname_model.fieldname
) .像(在你的
models.py
):然后在新的迁移中,向FkModel添加一个新字段:
运行South
schemamigration
时会出错:DatabaseError: no such column: myappmodel_fkmodel.new_field
您可以通过确保初始South迁移包含此默认值
lambda
函数来解决此问题,但随后在下一次迁移中删除默认值 .这在过去一直困扰着我 . 希望它能帮助将来的某个人 .