4

我正在尝试使用 South 将新的 URLField 添加到模型中,例如:

class Document(models.Model):
    text = models.TextField()
    reference_page = models.URLField(blank=True, null=True)
    source_page = models.URLField(blank=True, null=True) # new field

但是,当我运行时,python manage.py schemamigration myapp --auto我得到了错误:

DatabaseError: column myapp_document.source_page does not exist
LINE 1: ...ext", "myapp_document"."reference_page", "myapp_doc...

我使用 PostgreSQL 作为我的数据库后端。我为 South 正确初始化了我的应用程序,并且已经为它运行了迁移。我已经确保我的 Django 和 South 安装是最新的。

为什么它现在会给我这个错误?

编辑:奇怪的是,如果我在数据库中手动创建列,schemamigration调用成功,但当然migrate调用失败,直到我手动删除列。这很奇怪。

4

2 回答 2

5

我已经处理这个问题几个月了。montiniz 在对另一个答案的评论中共享的链接有一个 0 票的答案,它解决了我的问题!我把它贴在这里是为了帮助别人......建立知识社区等等。


问题: schemamigration [app] --auto因抱怨缺少列而失败(通常针对您尝试迁移架构的新字段......)

在我的情况下,它只会在修改Workgroup模型(a models.py Model)而不是任何其他模型时抱怨。

解决方案:在引用无法迁移的模型的关系中查找另一个具有default关键字参数的模型。ForeignKey

workgroup = models.ForeignKey('core.Workgroup', default=get_default_workgroup, null=True)

如果删除default关键字参数,然后运行管理命令,它应该会成功。然后,只需将原始default参数添加回来。

于 2013-12-02T17:14:37.570 回答
1

仔细检查您的迁移文件,特别是models. 好像有人在玩弄它。如果当前迁移编号为 10,则models在迁移 9 及以下的迁移中不得列出此新字段。如果它在那里,则将其删除。

于 2013-12-02T20:58:03.273 回答