【问题标题】:Django, South. Can't add new field姜戈,南。无法添加新字段
【发布时间】:2014-09-20 05:23:47
【问题描述】:

我必须向模型添加一个新字段,这给我带来了很多麻烦。 因此,我尝试进行虚假迁移,然后再次迁移,但没有成功。然后我尝试了其他一些也不起作用的东西。

然后我累了,从数据库中删除了 south_migrationhistory 表,从我的应用程序中删除了“迁移”文件夹,然后从头开始。在每个应用程序上运行 syncdb 并“向南转换”,然后在每个应用程序上“迁移”,我每次都得到“没有要迁移的东西”。

现在我得到了与以前相同的错误:“列不存在”。那是我要添加到表中的列。如果我从数据库中删除了 south_migrationhistory 表并删除了“迁移”文件夹,我不知道为什么会出现此错误。

在这里完全迷失和担心。任何帮助将不胜感激。

【问题讨论】:

  • 这只是在开发中吗?如果您删除整个数据库并执行 syncdb 和迁移,会发生什么情况? (请记住在进行重大更改之前先备份您的数据库)
  • 是的,它刚刚在开发中。我想这会起作用(删除数据库,然后删除同步数据库)。只是再次尝试,甚至运行pip install south --upgrade以防万一。有点不起作用,仍然无法以正常方式添加字段(使用 South)。
  • 好的,字段类型是什么?您可以在添加该字段之前和之后发布您的模型吗?

标签: django migration django-south


【解决方案1】:

让我们看看你说你做了什么:

  1. “convert to south”将创建初始迁移并伪造应用程序
  2. “迁移”:如果您所做的只是皈依南方,就没有什么可迁移的了。

到目前为止,它的行为符合预期。

您真正需要做的是运行“向南转换”,您的代码库处于与您的数据库匹配的状态,即从您的 models.py 中删除缺少的列

然后您需要将新列添加回models.py,运行python manage.py schemamigration myapp --auto,这将生成SQL 语句来添加您缺少的字段,然后您需要运行migrate命令。

发生的事情是您的“向南转换”认为缺少的列已经存在。它没有。

另一个解决方案是对南不做任何事情,然后通过 SQL 手动将缺少的列添加到您的数据库中。未来的新南迁移部署仍然有效,因为 CREATE TABLE 语句将包含您缺少的列。

【讨论】:

  • 好的,我更正了。我卸载了 south,删除了 south_migrationhistory 表并再次删除了迁移文件夹。然后,我注释掉了我想添加的两个字段,然后运行“向南转换”(并检查一切正常:我可以浏览该站点)。最后我运行了 schemamigration 和 migrate.. 但是当我“迁移”时,它给了我一个新的错误:关系已经存在。看起来第一个问题已经解决了,现在我有第二个了。
  • @alejoss 随时发布所有详细信息,例如您的迁移文件、文件夹和错误。但也可以根据新的错误消息自行调查问题。
  • 好的,谢谢,我会接受这个答案,因为新问题可能是不同的,值得提出新问题。其实我已经发过了。希望有时间可以看一下:question.
猜你喜欢
  • 1970-01-01
  • 2021-03-10
  • 1970-01-01
  • 2021-03-14
  • 2022-06-24
  • 1970-01-01
  • 2010-12-08
  • 2017-12-28
  • 2022-12-11
相关资源
最近更新 更多