我在models.py的现有类中添加了orgname = models.CharField(max_length=50)
,然后我运行了python manage.py syncdb
,但发现它没有创建列(我顺便使用PostgreSQL),所以我需要做python manage.py sqlall <myapp>
我所做的并输出以下内容:
BEGIN;
CREATE TABLE "file_uploader_files" (
"id" serial NOT NULL PRIMARY KEY,
"file" varchar(100) NOT NULL,
"orgname" varchar(50) NOT NULL
)
;
COMMIT;
然而,当我进入Django的shell或查看pgAdmin3时,仍然没有创建该列。我究竟做错了什么?我会手动添加它,但我不确定如何。
P.S。该表已经预先创建,文件varchar也是如此,orgname在我初始创建该列之后出现。
答案 0 :(得分:2)
sqlall command
的文档说:
打印给定应用程序名称的CREATE TABLE和初始数据SQL语句。
它打印SQL,它不运行任何东西。 Django永远不会修改您的架构,您需要自己完成 - 上面的输出可以通过向您显示orgname字段的类型来提供帮助。或者使用像South这样的东西。
答案 1 :(得分:1)
另请参阅此问题:update django database to reflect changes in existing models(前两个答案涵盖了您的问题)。
注意:syncdb无法更新现有表。有时候不可能自动决定做什么 - 这就是为什么南方剧本很棒的原因。
在另一个another answer ...
python manage.py reset <your_app>
这将更新您应用的数据库表,但会完全销毁这些表中存在的所有数据。