关于python:table polls_choice没有名为poll_id的列

table polls_choice has no column named poll_id

我在Django教程的第2部分。这是我在Django管理中添加"选项"时遇到的错误

1
DatabaseError: table polls_choice has no column named poll_id

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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;

这是我的设置.py

http://pastebin.com/g4kvigqx

非常感谢您的帮助!谢谢您!


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

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

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

1
drop table polls_choice;

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

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


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