python中列,python – ‘字段列表’中的未知列”. Django的

我正在使用Django 1.9和MySQL.我想在模型中重命名一个字段.让我们来看看Django getting started tutorial的模型选择.

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)))

我有:

Unknown column ‘polls_choice.votes’ in ‘field list

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'")

解决方法:

看起来您创建并运行迁移以将模型字段从投票重命名为votes_count,但不会同时更新模型.

当Django尝试从数据库中获取模型时,它会尝试选择投票列,因为模型中仍有一个投票字段,并且由于数据库中不存在该列而导致错误.

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

标签:python,mysql,django

来源: https://codeday.me/bug/20190702/1355784.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值