Прежде всего, я недавно обновился с Django 1.6 до 1.8 и никогда не использовал Юг, поэтому я новичок в миграции.Django: «Неизвестная колонна» при запуске makemigrations в приложении после добавления поля Integer
Я просто побежал:
> python manage.py makemigrations myapp
> python manage.py migrate --fake initial
создать начальные миграции для моей модели с существующими таблицами MySQL. Пока все было хорошо.
Затем я добавил IntegerField к моей модели:
new_integer_field = models.IntegerField(default = 50) #can include blank=True, null=True; seems to make no difference
Теперь, когда я бегу:
>python manage.py makemigrations myapp
Я получаю
django.db.utils.OperationalError: (1054, "Unknown column 'myapp_mymodel.new_integer_field' in 'field list'")
обратное прослеживание (начиная где возникла проблема) это:
Traceback (most recent call last):
File "./manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File ".../django/core/management/__init__.py", line 338, in execute_from_command_line
utility.execute()
File ".../django/core/management/__init__.py", line 312, in execute
django.setup()
File ".../django/__init__.py", line 18, in setup
apps.populate(settings.INSTALLED_APPS)
File ".../django/apps/registry.py", line 115, in populate
app_config.ready()
File ".../autocomplete_light/apps.py", line 9, in ready
autodiscover()
File ".../autocomplete_light/registry.py", line 298, in autodiscover
autodiscover_modules('autocomplete_light_registry')
File ".../django/utils/module_loading.py", line 74, in autodiscover_modules
import_module('%s.%s' % (app_config.name, module_to_search))
File ".../python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File ".../mymapp/autocomplete_light_registry.py", line 42, in <module>
x = other_model.other_model_manager.manager_function(),
File ".../myapp/models.py", line 759, in get_a_queryset
stus = a_queryset
File ".../myapp/models.py", line 92, in get_another_queryset
if obj.model_function(prog):
File ".../myapp/models.py", line 402, in model_function
z = object.MyManagerObjects.manager_function(self)
File ".../myapp/models.py", line 573, in get_type
curstart = mymodel.MyManagerObjects.get().old_field
File ".../python2.7/site-packages/django/db/models/manager.py", line 127, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File ".../python2.7/site-packages/django/db/models/query.py", line 328, in get
num = len(clone)
File ".../python2.7/site-packages/django/db/models/query.py", line 144, in __len__
self._fetch_all()
File ".../python2.7/site-packages/django/db/models/query.py", line 965, in _fetch_all
self._result_cache = list(self.iterator())
File ".../python2.7/site-packages/django/db/models/query.py", line 238, in iterator
results = compiler.execute_sql()
File ".../python2.7/site-packages/django/db/models/sql/compiler.py", line 840, in execute_sql
cursor.execute(sql, params)
File ".../python2.7/site-packages/django/db/backends/utils.py", line 79, in execute
return super(CursorDebugWrapper, self).execute(sql, params)
File ".../python2.7/site-packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File ".../python2.7/site-packages/django/db/utils.py", line 97, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File ".../python2.7/site-packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File ".../python2.7/site-packages/django/db/backends/mysql/base.py", line 124, in execute
return self.cursor.execute(query, args)
File ".../python2.7/site-packages/MySQLdb/cursors.py", line 205, in execute
self.errorhandler(self, exc, value)
File ".../python2.7/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
django.db.utils.OperationalError: (1054, "Unknown column 'myapp_mymodel.new_integer_field' in 'field list'")
MyManager проста, следующим образом:
class MyManager(models.Manager):
def get_queryset(self):
return super(MyManager, self).get_queryset().filter(...some filters...) #this is guaranteed to return a queryset with one object in it.
А внутри MYAPP/models.py:
MyManagerObjects = MyManager()
Итак, мой вопрос, почему я не могу добавить поле MyModel и запустить makemigrations? Что ломается в менеджере? Я запускаю stacktrace там, потому что я пробовал различные стратегии комментирования, которые, как представляется, указывают на этого менеджера, независимо от того, что были предыдущие вызовы.
Я уверен, что кто-то может сказать мне, что это что-то быстрое и простое, что я просто не вижу, но я не уверен, как это будет так! У кого-нибудь еще была эта проблема или есть какие-то предложения?
---- **** ---- Обновление 1: ошибка возникает не только с makemigrations - так как некоторые комментаторы спрашивали, что происходит, когда я запускаю python manage.py migrate
Я думал, что попробую это для вещей и хихикает, хотя мигрировать нечего. Я ожидал, что мне будет сказано, что мигрировать нечем, но у меня такая же ошибка. Так что это не сам код макетирования; это то, что не может функционировать, потому что оно не может найти новое поле. Как-то он смотрит на модель и находит поле, которое он не распознает. Но почему?!
---- **** ---- Обновление 2: Я добавил начало трассировки ... Я не хочу публиковать какие-либо фактические имена путей/моделей, следовательно, изменения. Надеюсь, все в порядке. Заметка - это, насколько мне известно, не относится к autocomplete_light (если это не так!), Потому что, когда я прокомментирую строку x = other_model.other_model_manager.manager_function()
(строка 42 в autocomplete_light_registry.py), ошибка возникает без ссылки на autocomplete_light. Я добавил вторую трассировку здесь, если это тоже помогает!
Traceback (most recent call last):
File "./manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File ".../django/core/management/__init__.py", line 338, in execute_from_command_line
utility.execute()
File ".../django/core/management/__init__.py", line 312, in execute
django.setup()
File ".../django/__init__.py", line 18, in setup
apps.populate(settings.INSTALLED_APPS)
File ".../django/apps/registry.py", line 115, in populate
app_config.ready()
File ".../django/contrib/admin/apps.py", line 22, in ready
self.module.autodiscover()
File ".../django/contrib/admin/__init__.py", line 24, in autodiscover
autodiscover_modules('admin', register_to=site)
File ".../django/utils/module_loading.py", line 74, in autodiscover_modules
import_module('%s.%s' % (app_config.name, module_to_search))
File ".../python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File ".../myapp/admin.py", line 151, in <module>
class MyListFilter(SimpleListFilterWithDefault):
File ".../myapp/admin.py", line 154, in MyListFilter
x = mymodel.MyManagerObjects.get()
File ".../django/db/models/manager.py", line 127, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File ".../django/db/models/query.py", line 328, in get
num = len(clone)
File ".../django/db/models/query.py", line 144, in __len__
self._fetch_all()
File ".../django/db/models/query.py", line 965, in _fetch_all
self._result_cache = list(self.iterator())
File ".../django/db/models/query.py", line 238, in iterator
results = compiler.execute_sql()
File ".../django/db/models/sql/compiler.py", line 840, in execute_sql
cursor.execute(sql, params)
File ".../django/db/backends/utils.py", line 79, in execute
return super(CursorDebugWrapper, self).execute(sql, params)
File ".../django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File ".../django/db/utils.py", line 97, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File ".../django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File ".../django/db/backends/mysql/base.py", line 124, in execute
return self.cursor.execute(query, args)
File ".../MySQLdb/cursors.py", line 205, in execute
self.errorhandler(self, exc, value)
File ".../MySQLdb/connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
django.db.utils.OperationalError: (1054, "Unknown column 'myapp_mymodel.new_integer_field' in 'field list'")
вы запустить Перенести после запускали makemigrations во второй раз? – karthikr
@ karthikr Я не могу; ошибка возникает, когда я запускаю 'python manage.py makemigrations myapp', поэтому миграция нечем. – jenniwren
Вся трассировка также поможет определить стадию инициализации приложения, когда он не работает. – Fush