在Django app中更新字段时出现问题

时间:2011-09-07 15:50:55

标签: python sql django

我正在尝试使用Django创建一个新网站。我只是刚刚开始进行Web开发,并且对很多零碎的东西都很陌生,例如SQL。

我定义了一个包含各种字段的模型,然后继续在Django shell中创建了它的实例等。后来我更改了一些字段的名称,现在当我尝试使用像Post.objects.all()这样的模型时,我会收到如下错误:

DatabaseError: no such column: posts_post.body

如何更新我的数据库条目(或只删除它们),以便我可以继续使用我的网站?

由于

4 个答案:

答案 0 :(得分:2)

您为应用程序“帖子”的模型“发布”添加了名称为“body”的新属性。 Django无法自动为这个新字段创建数据库列(它只能为新模型创建数据库表)。因此,您需要手动创建所有新字段。在数据库中更改您的表:

ALTER TABLE `posts_post` ADD COLUMN `body` Text; 

答案 1 :(得分:2)

解决方案有一个名称,South,我使用南方的所有django网站!在你习惯它之后它非常有用且易于使用!给它一个拍!

使用south迁移该表,您需要运行2个命令:

首先,创建迁移脚本:

python manage.py schemamigration posts --auto

Afterwars实际应用表格更改:

python manage.py migrate posts

答案 2 :(得分:0)

自从将该字段添加到模型后,您几乎肯定没有运行manage.py syncdb

如果您运行了syncdb,然后将该字段添加到模型中,则需要删除该表并使用syncdb重新开始。

或者,安装South,因为它会为您进行此类架构升级。

答案 3 :(得分:0)

manage.py syncdb虽然为其创建表,但它不会处理现有模型 新车型。为此你可以使用South 安装南跑后 python manage.py schemamigration myapp --auto(适用于现有型号) 要么 python manage.py schemamigration myapp --initial(适用于新型号) 然后 python manage.py迁移myapp

使用South后,您将无法运行manage.py syncdb来创建模型 和南创建一个存储迁移文件的目录

当你下次设置应用程序时,你必须运行python manage.py migrate来为数据库中的模型制作表格