python - Unknown column '' in 'field list'. Django -
i'm using django 1.9 , mysql. want rename field in model. let's @ model choice django getting started tutorial.
class choice(models.model): question = models.foreignkey(question) choice_text = models.charfield(max_length = 200) votes = models.integerfield(default=0) so, want rename votes field votes_count. created empty migration , add operations following line:
migrations.renamefield ( model_name='choice', old_name='votes', new_name='votes_count', ), after python manage.py migrate, field in database table renamed. when tried use model
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 choice." }) else: selected.votes_count += 1 selected.save() return httpresponseredirect(reverse('polls:results', args=(question_id))) i got:
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) above exception ((1054, "unknown column 'polls_choice.votes' in 'field list'")) direct cause of 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 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 @ /polls/1/vote/ exception value: (1054, "unknown column 'polls_choice.votes' in 'field list'")
it looks if created , ran migration rename model field votes votes_count, did not update model @ same time.
when django tries fetch model db, tries select votes column because still have votes field in models, , error because column doesn't exist in database.
creating manual migration isn't necessary. usually, rename model field, run makemigrations, run migrate. advantage of letting django create migration can confident database in sync models after have run migrate.
Comments
Post a Comment