0

所以我正在使用基于 Django 的 RapidSMS,我正在尝试将他们的教程结合起来,特别是django中的投票应用程序和 rapidsms中的投票应用程序我从投票开始,并试图使用 django 教程中的代码来扩展它当我遇到麻烦时。(我在 Windows7 64 位、Django 1.5 和 SQLite3 上使用 python27)这是我在 vote.models 中的内容

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

投票部分在管理员上显示得很好,我可以提出问题和日期,但是当我尝试添加选项或触摸选项时,我收到错误“表投票选择没有名为 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;

所以它/说/它在这里有那一列。然后我同步db,迁移以获得良好的度量并运行服务器,或者shell和任何一种输入投票问题/日期的方式都很好,但是一旦我尝试添加一个选项或查看一个创建的投票,我就会收到上述错误。投票肯定包含在 INSTALLED_APPS 中。所以作为一个 Django 新手,我迷路了。如果有人有更多的建议可以尝试,他们将不胜感激。

谢谢,莉齐

4

1 回答 1

1

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

在为 Choice 制作表格后,我添加了 poll = models.ForeignKey(Poll) ...

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

于 2013-07-11T13:49:03.373 回答