Django教程1错误

时间:2013-10-24 12:44:36

标签: python django

几周前我开始使用django教程第1部分并回来后发现Poll已更改为Question。当我第一次尝试从

更改models.py文件时
class Poll(models.Model):

class Question(models.Model):
跑完后

 python manage.py sql polls

我收到以下错误:

NameError: name 'Poll' is not defined

我的第一个问题是,如果我想在模型文件中更改类的名称,我该怎么做才能避免这样的错误?

所以,我把它命名为民意调查以消除这个错误。但是,当我进入教程中的部分时,它说:

  

进入shell后,请浏览数据库API:

     
    
      
        

来自polls.models import Poll,Choice

                 

Poll.objects.all()

      
    
  

但是我收到以下错误:

 File "<console>", line 1, in <module>
  File "/usr/lib/python2.6/site-packages/django/db/models/query.py", line 93, in __repr__
    data = list(self[:REPR_OUTPUT_SIZE + 1])
  File "/usr/lib/python2.6/site-packages/django/db/models/query.py", line 108, in __len__
    self._result_cache.extend(self._iter)
  File "/usr/lib/python2.6/site-packages/django/db/models/query.py", line 317, in iterator
    for row in compiler.results_iter():
  File "/usr/lib/python2.6/site-packages/django/db/models/sql/compiler.py", line 775, in results_iter
    for rows in self.execute_sql(MULTI):
  File "/usr/lib/python2.6/site-packages/django/db/models/sql/compiler.py", line 840, in execute_sql
    cursor.execute(sql, params)
  File "/usr/lib/python2.6/site-packages/django/db/backends/util.py", line 41, in execute
    return self.cursor.execute(sql, params)
  File "/usr/lib/python2.6/site-packages/django/db/backends/mysql/base.py", line 128, in execute
    six.reraise(utils.DatabaseError, utils.DatabaseError(*tuple(e.args)), sys.exc_info()[2])
  File "/usr/lib/python2.6/site-packages/django/db/backends/mysql/base.py", line 120, in execute
    return self.cursor.execute(query, args)
  File "/usr/lib64/python2.6/site-packages/MySQLdb/cursors.py", line 201, in execute
    self.errorhandler(self, exc, value)
  File "/usr/lib64/python2.6/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
    raise errorclass, errorvalue
DatabaseError: (1054, "Unknown column 'polls_poll.question_text' in 'field list'")

所以,只是想知道这里出了什么问题。

由于

3 个答案:

答案 0 :(得分:2)

您更改了模型的名称,但仍使用旧名称访问它。您现在需要使用新名称访问它。你还必须做

  

python manage.py syncdb

在对模型进行更改后同步数据库表。

from polls.models import Question, Choice

Question.objects.all()

如果仍然出现数据库错误,请删除数据库文件并再次运行syncdb。对于实际开发,请使用South

答案 1 :(得分:1)

您需要迁移数据库。但由于它是教程,只需擦除您的数据库并重新开始。 否则,请查看SOUTH

答案 2 :(得分:1)

如果您已将模型类名称更改为Question,那么您应该更改教程中的行以尝试

#------------------------v
from polls.models import Question, Choice

Question.objects.all()

此外,您还必须syncdb