我最近开始学习Django,并且在教程中遇到了一个奇怪的问题。一切都很顺利,直到我开始玩交互式shell,然后每当我尝试调用其中一个表中的所有对象时,我都会收到错误。
我在MacOs X上使用Django 1.1,Python 2.5。
对于那些不熟悉本教程的人,您正在建立一个网站来管理民意调查。您在模型中有以下代码:
from django.db import models
import datetime
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_today(self):
return self.pub_date.date() == datetime.date.today()
was_published_today.short_description = 'Published today?'
class Choice(models.Model):
poll = models.ForeignKey(Poll)
choice = models.CharField(max_length=200)
votes = models.IntegerField()
def __unicode__(self):
return self.choice
创建模型后,添加一个投票项,然后为其添加一些选项。 一切都很好,直到我试图查看选择表中的所有对象或试图查看特定民意调查中的所有选项。然后我收到了一个错误。下面是交互式shell中的一系列示例命令。请注意,选项的计数是正确的(我在遇到错误后进行了一些实验,所以计数有点高。)
>>> from mysite.polls.models import Poll, Choice
>>> Poll.objects.all()
[<Poll: What's up>, <Poll: Yups>]
>>> Choice.objects.count()
10
>>> Choice.objects.all()
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/Library/Python/2.5/site-packages/django/db/models/query.py", line 68, in __repr__
data = list(self[:REPR_OUTPUT_SIZE + 1])
File "/Library/Python/2.5/site-packages/django/db/models/query.py", line 83, in __len__
self._result_cache.extend(list(self._iter))
File "/Library/Python/2.5/site-packages/django/db/models/query.py", line 238, in iterator
for row in self.query.results_iter():
File "/Library/Python/2.5/site-packages/django/db/models/sql/query.py", line 287, in results_iter
for rows in self.execute_sql(MULTI):
File "/Library/Python/2.5/site-packages/django/db/models/sql/query.py", line 2369, in execute_sql
cursor.execute(sql, params)
File "/Library/Python/2.5/site-packages/django/db/backends/util.py", line 19, in execute
return self.cursor.execute(sql, params)
File "/Library/Python/2.5/site-packages/django/db/backends/sqlite3/base.py", line 193, in execute
return Database.Cursor.execute(self, query, params)
File "/Library/Python/2.5/site-packages/django/db/backends/util.py", line 82, in typecast_timestamp
seconds = times[2]
IndexError: list index out of range
可以找到Django教程(第1部分)here
谢谢!
答案 0 :(得分:1)
问题似乎是数据库与模型不同步。重置数据库工作正常。感谢Alasdair提出的建议。
答案 1 :(得分:0)
看起来问题是was_published_today()
正在将日期时间与日期进行比较。尝试将其更改为:
return self.pub_date.date() == datetime.date.today()
答案 2 :(得分:0)
由于问题似乎是在将字符串解释为时间戳的代码中,我有兴趣看到db中的实际数据。看起来那里的时间戳不是正确的形式。不确定如何在没有看到它的情况下到达那里,但我打赌那里有一个线索。