Проблемы с обновлением Django от 1,8 до 1,9
Только что установил Django 1.9 и пытаюсь обновить приложение 1.8. После тщательного изучения примечаний к выпуску я все равно получаю следующий след (см. Ниже).
Я думал, что это как-то связано с миграциями, но очистка папки миграций не имеет никакого эффекта.
Может кто-нибудь указать мне ссылку на то, что мне не хватает?
Performing system checks...
System check identified no issues (0 silenced).
Unhandled exception in thread started by <function wrapper at 0x9757454>
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/django/utils/autoreload.py", line 226, in wrapper
fn(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/runserver.py", line 124, in inner_run
self.check_migrations()
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 448, in check_migrations
executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/executor.py", line 20, in __init__
self.loader = MigrationLoader(self.connection)
File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/loader.py", line 52, in __init__
self.build_graph()
File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/loader.py", line 197, in build_graph
self.load_disk()
File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/loader.py", line 115, in load_disk
app_config.label,
TypeError: object.__new__() takes no parameters
1 ответ
Я нашел решение.
У меня был установлен South, который содержит старую версию класса Migrate. Это был не INSTALLED_APP settings.py. Но у меня были установлены расширения django. Эта старая версия ссылалась на Юг, что привело к южной версии Migrate, а не к новой версии django.
Решением было "sudo pip uninstall south" и "sudo pip install django-extensions --upgrade".
Все исправлено.
Хитрость заключалась в том, чтобы использовать модуль "inspect" для распечатки имен файлов классов и родительских классов в файле loader.py, где он не работал:
import inspect
print( '****', inspect.getfile(migration_module.Migration) )
print( '********', inspect.getfile(inspect.getmro(migration_module.Migration)[1]) )
Это быстро показало, что loader.py получал неправильную версию Migrate.