Django / RapidSMS Foreignkey不是表中的列

时间:2013-07-11 10:30:47

标签: django python-2.7 django-models sqlite

所以我正在使用基于Django构建的RapidSMS,我正在尝试将他们的教程特别结合poll app in django和我开始投票的voting app in rapidsms并尝试使用它来扩展它当我遇到麻烦时,来自django教程的代码。 (我在Windows7 64bit,Django 1.5和SQLite3上使用python27)这就是我在投票中所拥有的。模型

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

民意调查部分在管理员上显示正常,我可以提问和日期,但是当我尝试添加选项或触摸选项时,我得到错误“表vote_choice没有名为poll_id的列”

我在为Choice做了一个表之后添加了poll = models.ForeignKey(Poll),我认为在经过一些研究之后可能会出现问题(可能它仍然存在)我得到的印象是表格没有被写入过度。所以这就是我所做的:

>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;

所以它/说/它在这里有那个专栏。我然后syncdb,迁移for good measure和runserver,或者shell和任何一种方式输入民意调查问题/日期都没问题,但是一旦我尝试添加选项或查看创建的民意调查,我就会得到上面提到的错误。 投票肯定包含在INSTALLED_APPS中。所以,作为一个Django新手,我迷路了。如果有人有更多的建议尝试,他们将非常感激。

谢谢, 萃

1 个答案:

答案 0 :(得分:1)

如果Django要创建表格,那么manage.py sql voting所说的是生成的SQL。它不输出表的当前状态,也不应用它输出的SQL。同样,manage.py sqlclear voting显示SQL以清除表,但不会将其应用于数据库。

  

我为Choice做了一个表之后添加了poll = models.ForeignKey(Poll)...

有你的问题。 syncdb不会更改现有表。您需要自己更改表或删除并让Django重新创建它(如果您没有任何值得保留的数据)。