Индекс официального учебного пособия по Django, часть 1, ошибка связана - PullRequest
3 голосов
/ 15 декабря 2009

Я недавно начал изучать Django, и у меня возникла странная проблема с учебником. Все шло хорошо, пока я не начал играть с интерактивной оболочкой, а затем я получал ошибку всякий раз, когда пытался вызвать все объекты в одной из таблиц.

Я использую Django 1.1, Python 2.5 на MacOs X.

Для тех, кто не знаком с руководством, вы создаете веб-сайт для управления опросами. У вас есть следующий код в модели:

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

После создания модели вы добавляете элемент опроса, а затем добавляете к нему несколько вариантов. Все было хорошо, пока я не попытался увидеть все объекты в таблице выбора или не попытался увидеть все варианты в определенном опросе. Тогда я получил ошибку. Вот пример серии команд в интерактивной оболочке. Пожалуйста, обратите внимание, что количество вариантов правильное (я немного поэкспериментировал после того, как столкнулся с ошибкой, поэтому число немного выше).

>>> 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) можно найти здесь

Спасибо!

Ответы [ 3 ]

1 голос
/ 14 января 2010

Проблема заключалась в том, что база данных не была синхронизирована с моделями. Сброс базы данных работал нормально. Спасибо Alasdair за предложение.

0 голосов
/ 15 декабря 2009

Поскольку проблема заключается в коде, который интерпретирует строки как временные метки, мне было бы интересно увидеть фактические данные в БД. Похоже, там есть отметка времени, которая не в правильной форме. Не уверен, как он попал туда, не увидев его, но держу пари, что там есть подсказка.

0 голосов
/ 15 декабря 2009

Похоже, проблема в том, что was_published_today() сравнивает дату и время с датой. Попробуйте изменить его на:

return self.pub_date.date() == datetime.date.today()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...