6

我在 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

任何帮助深表感谢!谢谢你!

4

2 回答 2

11

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

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

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

drop table polls_choice;

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

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

于 2013-07-29T11:15:44.737 回答
5

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

于 2013-07-29T10:57:47.500 回答