【发布时间】:2014-02-09 23:20:12
【问题描述】:
我有一个预先存在的模型Item。我最近在这个模型中添加了一个 ForeignKey(User),现在我在尝试渲染页面时得到了no such column: todo_item.user_id。
型号:
class Item(models.Model):
user = models.ForeignKey(User) # new
name = models.CharField(max_length=60)
created = models.DateTimeField(auto_now_add=True)
priority = models.IntegerField(default=0)
difficulty = models.IntegerField(default=0)
done = models.BooleanField(default=False)
manage.py sqlall 的输出:
BEGIN;
CREATE TABLE "todo_item" (
"id" integer NOT NULL PRIMARY KEY,
"user_id" integer NOT NULL REFERENCES "auth_user" ("id"),
"name" varchar(60) NOT NULL,
"created" datetime NOT NULL,
"priority" integer NOT NULL,
"difficulty" integer NOT NULL,
"done" bool NOT NULL
)
;
CREATE INDEX "todo_item_6340c63c" ON "todo_item" ("user_id");
COMMIT;
我意识到manage.py syncdb 不会改变我预先存在的表。而且我知道我可以使用 South 或类似的东西来避免丢失我的数据,但我仍处于测试模式,我不关心表中的任何当前数据。我很乐意将它擦干净以使其正常工作。其实我已经有了。
我已经跑了:
python manage.py flush todo
然后
python manage.py syncdb
这似乎应该奏效了。在我运行 flush 之后,它让我输入了一个新的管理员用户,并且我所有的 todo_item 数据都消失了。但它似乎并没有杀死 todo_item 表。如果我在 sqlite shell 中使用PRAGMA table_info(todo_item),运行这些命令后,我看不到 user_id 列。
我的问题是:除了flush 和syncdb,我还需要做什么才能让数据库反映对我的模型的更改?
【问题讨论】:
-
我无法标记它,但我认为它与以下内容重复:[更新 django 数据库以反映现有模型的变化][1] [1]:stackoverflow.com/questions/1985383/…
-
@itconlor 这个问题似乎与那个问题非常相似。但是 dm03514 下面给出的答案是我的问题的实际解决方案。并且没有被列为该问题的答案。
标签: python django sqlite django-models