我正在尝试使用Django创建一个新网站。我只是刚刚开始进行Web开发,并且对很多零碎的东西都很陌生,例如SQL。
我定义了一个包含各种字段的模型,然后继续在Django shell中创建了它的实例等。后来我更改了一些字段的名称,现在当我尝试使用像Post.objects.all()这样的模型时,我会收到如下错误:
DatabaseError: no such column: posts_post.body
如何更新我的数据库条目(或只删除它们),以便我可以继续使用我的网站?
由于
答案 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来为数据库中的模型制作表格