2013-07-11 2 views
0

поэтому я работаю с RapidSMS, который основывается на Django, и я пытаюсь сортировать их учебники, в частности, poll app in django и voting app in rapidsms. Я начал с голосования и пытался его расширить используя код из учебника django, когда я столкнулся с проблемой. (я использую python27 на 64-битной Windows7, Django 1.5, и SQLite3) Вот что я имею в voting.modelsDjango/RapidSMS Foreignkey не столбец в таблице

from django.db import models 
from django.utils import timezone 
# Create your models here. 

class Poll(models.Model): 
    question = models.CharField(max_length=200) 
    pub_date = models.DateTimeField('date published') 
    def __unicode__(self): 
     return self.question 
    def was_published_recently(self): 
     return self.pub_date >= timezone.now() - datetime.timedelta(days=1) 
class Choice(models.Model): 
    poll = models.ForeignKey(Poll) 
    name = models.CharField(max_length=40, unique=True) 
    votes = models.IntegerField(default=0) 
    def __unicode__(self): 
     return self.name 

Опрос часть показывает вверх штрафа на администратора, я могу вопрос и дата, но когда я пытаюсь добавить выбор или вообще коснуться выбора, я получаю сообщение об ошибке: «table vote_choice не имеет столбца с именем poll_id»

Я добавил опрос = models.ForeignKey (Опрос) после того, как я сделал таблицу для выбора, которая Я думал, что это может быть проблемой после некоторых исследований (возможно, это все еще есть). У меня сложилось впечатление, что таблицы не были написаны. Так вот что я сделал:

>manage.py sqlclear voting 
BEGIN; 
DROP TABLE "voting_choice"; 
DROP TABLE "voting_poll"; 

COMMIT; 

>manage.py sql voting 
BEGIN; 
CREATE TABLE "voting_poll" (
    "id" integer NOT NULL PRIMARY KEY, 
    "question" varchar(200) NOT NULL, 
    "pub_date" datetime NOT NULL 
) 
; 
CREATE TABLE "voting_choice" (
    "id" integer NOT NULL PRIMARY KEY, 
    "poll_id" integer NOT NULL REFERENCES "voting_poll" ("id"), 
    "name" varchar(40) NOT NULL UNIQUE, 
    "votes" integer NOT NULL 
) 
; 

COMMIT; 

Так оно/говорит/что у него есть эта колонка здесь. Затем я синхронизирую, мигрирую для хорошей меры и запускает сервер, или оболочка, и в любом случае, вводя вопрос/дату опроса, это нормально, но как только я попытаюсь добавить выбор или посмотреть созданный опрос, я получаю вышеупомянутую ошибку. Голосование обязательно включено в INSTALLED_APPS. Поэтому, будучи новичком в Django, я потерян. Если у кого-то есть больше предложений, чтобы попробовать, они были бы очень оценены.

Спасибо, Лиззи

ответ

1

Что manage.py sql voting говорит это SQL, что Уолд генерируется, если Django собирается создать таблицы. Он не выводит текущее состояние таблиц и не использует SQL, который он выводит. Аналогично, manage.py sqlclear voting показывает SQL для очистки таблиц, но не применяет его к базе данных.

Я добавил опрос = models.ForeignKey (Опрос) после того, как я сделал таблицу для выбора ...

Существует ваша проблема. syncdb не изменяет существующие таблицы. Вам нужно либо изменить таблицу самостоятельно, либо отказаться, а Django воссоздать ее (если у вас нет данных, которые нужно сохранить).

Смежные вопросы