Manage.py sqlall <myapp>不会创建列</myapp>

时间:2012-09-18 08:09:30

标签: python django postgresql django-models

我在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在我初始创建该列之后出现。

2 个答案:

答案 0 :(得分:2)

sqlall command的文档说:

  

打印给定应用程序名称的CREATE TABLE和初始数据SQL语句。

它打印SQL,它不运行任何东西。 Django永远不会修改您的架构,您需要自己完成 - 上面的输出可以通过向您显示orgname字段的类型来提供帮助。或者使用像South这样的东西。

答案 1 :(得分:1)

另请参阅此问题:update django database to reflect changes in existing models(前两个答案涵盖了您的问题)。

来自accepted answer

  

注意:syncdb无法更新现有表。有时候不可能自动决定做什么 - 这就是为什么南方剧本很棒的原因。

在另一个another answer ...

python manage.py reset <your_app>
     

这将更新您应用的数据库表,但会完全销毁这些表中存在的所有数据。