2013-07-29 29 views
5

我在Django教程的第2部分。这是我得到的时候尝试在Django管理添加一个“选择”的错误表polls_choice没有列名为poll_id

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

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

回答

11

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

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

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

drop table polls_choice; 

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

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

+0

不知道如何删除sqlite3的polls_choice = /似乎无法在shell – Liondancer

+2

,以显示我的表@Liondancer您无法通过命令来访问SQLite数据库线。最好的办法是删除数据库文件,重新创建它,然后再次运行syncdb。 – 2013-07-29 11:33:39

+0

@Ergusto谢谢!那就是诀窍! – Liondancer

5

ChoicePoll之间创建外键之前,您是否运行过python manage.py syncdb?您可能需要删除数据库并重新运行。

+0

是的,我做到了= [仍然没有工作= [ – Liondancer

相关问题