1

orgname = models.CharField(max_length=50)我在我的models.py中添加了一个现有的类,然后我跑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 时,仍然没有创建该列。我究竟做错了什么?我会手动添加它,但我不确定如何添加。

PS 该表已经预先创建,文件 varchar, orgname 是在我最初创建该列之后出现的。

4

2 回答 2

2

的文档sqlall command说:

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

它打印 SQL,它不运行任何东西。Django 永远不会修改你的模式,你需要自己做——上面的输出可以帮助你显示 orgname 字段的类型。或者使用类似 South 的东西。

于 2012-09-18T08:19:38.693 回答
1

另请参阅此 SO 问题:更新 django 数据库以反映现有模型的更改(前两个答案涵盖了您的问题)。

接受的答案

注意:syncdb 无法更新您现有的表。有时不可能自动决定要做什么——这就是为什么南方脚本如此出色。

另一个答案中......

python manage.py reset <your_app>

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

于 2012-09-18T08:27:52.590 回答