南无法创建新字段,因为字段不存在

时间:2013-09-03 23:27:37

标签: python django django-south

我正在尝试使用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作为我的数据库后端。我正确地初始化了我的南方应用程序,并且已经为它运行了迁移。我确保我的Django和South安装是最新的。

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

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

2 个答案:

答案 0 :(得分:6)

我已经处理了这个问题几个月了。 montiniz在对另一个答案的评论中分享的link有一个0票的答案,解决了我的问题!我在这里发布它是为了帮助其他人......建立知识社区以及所有这些。


问题: schemamigration [app] --auto因缺少有关错误列的投诉而失败(通常是针对您尝试迁移架构的新字段...)

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

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

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

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

答案 1 :(得分:1)

密切检查您的迁移文件,特别是models。看起来有人摆弄它。如果当前迁移编号为10,则迁移9及更低版本中的models不得在其中列出此新字段。如果它在那里,然后将其删除。

相关问题