我正在阅读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
非常感谢任何帮助!谢谢!
答案 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 syncdb
到Choice
上创建外键之前,您是否运行了Poll
?您可能需要删除数据库并再次运行它。