table polls_choice没有名为poll_id的列

时间:2013-07-29 10:55:20

标签: python django sqlite

我正在阅读Django教程的第2部分。这是我在Django管理中添加“选择”时遇到的错误

DatabaseError: table polls_choice has no column named poll_id

这是我运行命令时得到的结果

python manage.py sql polls

BEGIN;
CREATE TABLE "polls_poll" (
    "id" integer NOT NULL PRIMARY KEY,
    "question" varchar(200) NOT NULL,
    "pub_date" datetime NOT NULL
)
;
CREATE TABLE "polls_choice" (
    "id" integer NOT NULL PRIMARY KEY,
    "poll_id" integer NOT NULL REFERENCES "polls_poll" ("id"),
    "choice_text" varchar(200) NOT NULL,
    "votes" integer NOT NULL
)
;

COMMIT; 

这是我的settings.py

http://pastebin.com/g4KvigqX

非常感谢任何帮助!谢谢!

2 个答案:

答案 0 :(得分:11)

听起来你在运行syncdb后添加了poll外键。 syncdb创建表,但如果添加/更改/删除字段,则不会进行迁移。

对于Django 1.7+,您应该使用迁移而不是syncdb。对于Django< 1.7,强烈建议south进行数据库迁移。

但是,由于您正在完成本教程,并且没有任何重要数据,因此最简单的方法是删除表并重新创建它。在数据库shell中运行以下命令:

drop table polls_choice;

然后再次运行syncdb以重新创建表。

如果您的数据库中不需要任何数据,删除sqlite db文件会更快,然后再次运行syncdb。

答案 1 :(得分:5)

python manage.py syncdbChoice上创建外键之前,您是否运行了Poll?您可能需要删除数据库并再次运行它。