“字段列表”中的未知列“”。姜戈

新手上路,请多包涵

我正在使用 Django 1.9 和 MySQL。我想重命名模型中的字段。让我们看看 Django 入门教程 中的模型 Choice

 class Choice(models.Model):
  question = models.ForeignKey(Question)
  choice_text = models.CharField(max_length = 200)
  votes = models.IntegerField(default=0)

所以,我想将 votes 字段重命名为 votes_count 。我创建了一个空迁移并添加到以下行的操作中:

 migrations.RenameField (
    model_name='choice',
    old_name='votes',
    new_name='votes_count',
),

python manage.py migrate 之后,数据库表中的字段被重命名。但是当我尝试使用这个模型时

def vote(request, question_id):
  question = get_object_or_404(Question, pk=question_id);
  try:
    selected = question.choice_set.get(pk=request.POST['choice'])
  except (KeyError, Choice.DoesNotExist):
    return render(request, 'polls/detail.html', {
      'question':question,
      'error_message':"You didn't select a choice."
    })
  else:
    selected.votes_count += 1
    selected.save()
    return HttpResponseRedirect(reverse('polls:results', args=(question_id)))

我有:

“字段列表”中的未知列“polls_choice.votes”

     Traceback:

    File "/home/verdigo/venv/lib/python3.4/site-packages/django/db/backends/utils.py" in execute
      64.                 return self.cursor.execute(sql, params)

    File "/home/verdigo/venv/lib/python3.4/site-packages/django/db/backends/mysql/base.py" in execute
      112.             return self.cursor.execute(query, args)

    File "/home/verdigo/venv/lib/python3.4/site-packages/MySQLdb/cursors.py" in execute
      226.             self.errorhandler(self, exc, value)

    File "/home/verdigo/venv/lib/python3.4/site-packages/MySQLdb/connections.py" in defaulterrorhandler
      36.         raise errorvalue

    File "/home/verdigo/venv/lib/python3.4/site-packages/MySQLdb/cursors.py" in execute
      217.             res = self._query(query)

    File "/home/verdigo/venv/lib/python3.4/site-packages/MySQLdb/cursors.py" in
_query
      378.         rowcount = self._do_query(q)

    File "/home/verdigo/venv/lib/python3.4/site-packages/MySQLdb/cursors.py" in
_do_query
      341.         db.query(q)

    File "/home/verdigo/venv/lib/python3.4/site-packages/MySQLdb/connections.py" in query
      280.             _mysql.connection.query(self, query)

    The above exception ((1054, "Unknown column 'polls_choice.votes' in 'field list'")) was the direct cause of the following exception:

    File "/home/verdigo/venv/lib/python3.4/site-packages/django/core/handlers/base.py" in get_response
      149.                     response = self.process_exception_by_middleware(e, request)

    File "/home/verdigo/venv/lib/python3.4/site-packages/django/core/handlers/base.py" in get_response
      147.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)

    File "./polls/views.py" in vote
      23.     selected = question.choice_set.get(pk=request.POST['choice'])

    File "/home/verdigo/venv/lib/python3.4/site-packages/django/db/models/manager.py" in manager_method
      122.                 return getattr(self.get_queryset(), name)(*args, **kwargs)

    File "/home/verdigo/venv/lib/python3.4/site-packages/django/db/models/query.py" in get
      381.         num = len(clone)

    File "/home/verdigo/venv/lib/python3.4/site-packages/django/db/models/query.py" in __len__
      240.         self._fetch_all()

    File "/home/verdigo/venv/lib/python3.4/site-packages/django/db/models/query.py" in _fetch_all
      1074.             self._result_cache = list(self.iterator())

    File "/home/verdigo/venv/lib/python3.4/site-packages/django/db/models/query.py" in __iter__
      52.         results = compiler.execute_sql()

    File "/home/verdigo/venv/lib/python3.4/site-packages/django/db/models/sql/compiler.py" in execute_sql
      848.             cursor.execute(sql, params)

    File "/home/verdigo/venv/lib/python3.4/site-packages/django/db/backends/utils.py" in execute
      79.             return super(CursorDebugWrapper, self).execute(sql, params)

    File "/home/verdigo/venv/lib/python3.4/site-packages/django/db/backends/utils.py" in execute
      64.                 return self.cursor.execute(sql, params)

    File "/home/verdigo/venv/lib/python3.4/site-packages/django/db/utils.py" in
__exit__
      95.                 six.reraise(dj_exc_type, dj_exc_value, traceback)

    File "/home/verdigo/venv/lib/python3.4/site-packages/django/utils/six.py" in reraise
      685.             raise value.with_traceback(tb)

    File "/home/verdigo/venv/lib/python3.4/site-packages/django/db/backends/utils.py" in execute
      64.                 return self.cursor.execute(sql, params)

    File "/home/verdigo/venv/lib/python3.4/site-packages/django/db/backends/mysql/base.py" in execute
      112.             return self.cursor.execute(query, args)

    File "/home/verdigo/venv/lib/python3.4/site-packages/MySQLdb/cursors.py" in execute
      226.             self.errorhandler(self, exc, value)

    File "/home/verdigo/venv/lib/python3.4/site-packages/MySQLdb/connections.py" in defaulterrorhandler
      36.         raise errorvalue

    File "/home/verdigo/venv/lib/python3.4/site-packages/MySQLdb/cursors.py" in execute
      217.             res = self._query(query)

    File "/home/verdigo/venv/lib/python3.4/site-packages/MySQLdb/cursors.py" in
_query
      378.         rowcount = self._do_query(q)

    File "/home/verdigo/venv/lib/python3.4/site-packages/MySQLdb/cursors.py" in
_do_query
      341.         db.query(q)

    File "/home/verdigo/venv/lib/python3.4/site-packages/MySQLdb/connections.py" in query
      280.             _mysql.connection.query(self, query)

    Exception Type: OperationalError at /polls/1/vote/
    Exception Value: (1054, "Unknown column 'polls_choice.votes' in 'field list'")

原文由 verdigo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 732
2 个回答

看起来好像您创建并运行了迁移以将模型字段从 votes 重命名为 votes_count ,但没有同时更新模型。

当 Django 尝试从数据库中获取模型时,它会尝试选择 votes 列,因为您的模型中仍然有一个 votes 字段,并且出现错误,因为该列不存在于数据库。

通常不需要创建手动迁移。通常,您会重命名模型字段,运行 makemigrations ,然后运行 migrate 。让 Django 创建迁移的好处是您可以确信在运行迁移后数据库与您的模型同步。

原文由 Alasdair 发布,翻译遵循 CC BY-SA 3.0 许可协议

原因:创建新的一对多外键,指向带有forkey字段的模型,然后生成表时出现该错误

.

解决方法:这个问题可以通过直接删除数据库重建来解决。

1:删除数据库数据库表;

2、删除后重新创建,创建之前的代码,直接运行

原文由 The EasyLearn Academy 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题