2013-07-29 2 views
5

저는 장고 자습서 2 부에 있습니다. 이 시도는 장고 관리에서 "선택"을 추가 할 때 내가 오류입니다테이블 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를 다시 실행하여 테이블을 다시 작성하십시오.

db에 데이터가 필요하지 않으면 sqlite db 파일을 삭제 한 다음 syncdb를 다시 실행하는 것이 더 빠릅니다.

+0

sqlite3에서 polls_choice를 삭제하는 방법을 모르십니까/셸에 내 테이블을 표시 할 수 없습니다. – Liondancer

+2

@Liondancer 명령을 통해 sqlite 데이터베이스에 액세스 할 수 없습니다 선. 가장 좋은 방법은 데이터베이스 파일을 삭제하고 다시 만들고 syncdb를 다시 실행하는 것입니다. –

+0

@ Ergusto 감사합니다! 그 트릭을 했어! – Liondancer

5

Choice에서 Poll으로 외래 키를 만들기 전에 python manage.py syncdb을 실행 했습니까? 데이터베이스를 h 제하고 다시 실행해야합니다.

+0

예 그랬습니까 = [여전히 작동하지 않습니다 = [ – Liondancer

관련 문제