Ошибка обновления Django 1.7: AppRegistryNotReady: модели еще не загружены

Я пытаюсь обновить проект с Django 1.6 до 1.7. На данный момент я создал новую виртуальную среду со всеми теми же установками и обновил версию Django до новой версии. Мне нужно обновиться с юга, но при этом возникли ошибки, поэтому я подумал, что сначала просто попробую запустить сервер, и получаю следующую ошибку:

Traceback (most recent call last):
      File "manage.py", line 10, in <module>
        execute_from_command_line(sys.argv)
      File "/Users/Name/.virtualenvs/test17/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
        utility.execute()
      File "/Users/Name/.virtualenvs/test17/lib/python2.7/site-packages/django/core/management/__init__.py", line 354, in execute
        django.setup()
      File "/Users/Name/.virtualenvs/test17/lib/python2.7/site-packages/django/__init__.py", line 21, in setup
        apps.populate(settings.INSTALLED_APPS)
      File "/Users/Name/.virtualenvs/test17/lib/python2.7/site-packages/django/apps/registry.py", line 108, in populate
        app_config.import_models(all_models)
      File "/Users/Name/.virtualenvs/test17/lib/python2.7/site-packages/django/apps/config.py", line 197, in import_models
        self.models_module = import_module(models_module_name)
      File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module
        __import__(name)
      File "/Users/Name/Dev/tps/products/models.py", line 127, in <module>
        watson.register(Product.objects.exclude(productimage=None))
      File "/Users/Name/.virtualenvs/test17/lib/python2.7/site-packages/django/db/models/manager.py", line 92, in manager_method
        return getattr(self.get_queryset(), name)(*args, **kwargs)
      File "/Users/Name/.virtualenvs/test17/lib/python2.7/site-packages/django/db/models/query.py", line 698, in exclude
        return self._filter_or_exclude(True, *args, **kwargs)
      File "/Users/Name/.virtualenvs/test17/lib/python2.7/site-packages/django/db/models/query.py", line 707, in _filter_or_exclude
        clone.query.add_q(~Q(*args, **kwargs))
      File "/Users/Name/.virtualenvs/test17/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1287, in add_q
        clause, require_inner = self._add_q(where_part, self.used_aliases)
      File "/Users/Name/.virtualenvs/test17/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1314, in _add_q
        current_negated=current_negated, connector=connector)
      File "/Users/Name/.virtualenvs/test17/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1138, in build_filter
        lookups, parts, reffed_aggregate = self.solve_lookup_type(arg)
      File "/Users/Name/.virtualenvs/test17/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1076, in solve_lookup_type
        _, field, _, lookup_parts = self.names_to_path(lookup_splitted, self.get_meta())
      File "/Users/Name/.virtualenvs/test17/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1339, in names_to_path
        field, model, direct, m2m = opts.get_field_by_name(name)
      File "/Users/Name/.virtualenvs/test17/lib/python2.7/site-packages/django/db/models/options.py", line 416, in get_field_by_name
        cache = self.init_name_map()
      File "/Users/Name/.virtualenvs/test17/lib/python2.7/site-packages/django/db/models/options.py", line 445, in init_name_map
        for f, model in self.get_all_related_m2m_objects_with_model():
      File "/Users/Name/.virtualenvs/test17/lib/python2.7/site-packages/django/db/models/options.py", line 563, in get_all_related_m2m_objects_with_model
        cache = self._fill_related_many_to_many_cache()
      File "/Users/Name/.virtualenvs/test17/lib/python2.7/site-packages/django/db/models/options.py", line 577, in _fill_related_many_to_many_cache
        for klass in self.apps.get_models():
      File "/Users/Name/.virtualenvs/test17/lib/python2.7/site-packages/django/utils/lru_cache.py", line 101, in wrapper
        result = user_function(*args, **kwds)
      File "/Users/Name/.virtualenvs/test17/lib/python2.7/site-packages/django/apps/registry.py", line 168, in get_models
        self.check_models_ready()
      File "/Users/Name/.virtualenvs/test17/lib/python2.7/site-packages/django/apps/registry.py", line 131, in check_models_ready
        raise AppRegistryNotReady("Models aren't loaded yet.")
    django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.

Любые идеи, что может быть причиной ошибки и как ее исправить?


person Pete Drennan    schedule 05.09.2014    source источник
comment
вы удалили юг из установленных приложений?   -  person Raja Simon    schedule 05.09.2014
comment
да, я выполнил шаги здесь: ссылка, и я все еще получаю сообщение об ошибке   -  person Pete Drennan    schedule 05.09.2014
comment
примечание: я использую django-allauth и делаю то же самое с миграциями в этом приложении, не уверен, что это вызывает проблемы.   -  person Pete Drennan    schedule 05.09.2014
comment
Я неоднократно получал эту ошибку при выполнении runserver или чего-либо еще с manage.py. Это было много времени спустя после успешного обновления до 1.7. Оказалось, что это не имеет к этому никакого отношения, а лишь кусок кода, который я скопировал для справки и оставил внизу файла models.py.   -  person MagicLAMP    schedule 03.11.2015


Ответы (4)


Проблема с этой строкой ("/Users/Name/Dev/tps/products/models.py", строка 127):

watson.register(Product.objects.exclude(productimage=None))

Вы пытаетесь сослаться на модель во время импорта. В Django 1.7 это больше невозможно. Django 1.7 позволяет использовать ваши модели только после загрузки всех приложений. Вы должны переместить этот вызов в обратный вызов ready для AppConfig, например:

from django.apps import AppConfig


class ProductsConfig(AppConfig):
    name = 'products'

    def ready(self):
        Product = self.get_model('Product')
        watson.register(Product.objects.exclude(productimage=None))

Затем вы должны сослаться на этот AppConfig в __init__.py вашего products приложения:

default_app_config = 'products.apps.ProductsConfig'

Где apps это имя модуля, куда вы кладете конфиг.

Соответствующий документ по Django: https://docs.djangoproject.com/en/dev/ref/applications/

В целом, из-за этого изменения переход на Django 1.7 не так прост, как хотелось бы. Вот несколько советов по устранению неполадок: https://docs.djangoproject.com/en/1.7/ref/applications/#troubleshooting

person Spc_555    schedule 05.09.2014
comment
Спасибо Василий, я попробую внести эти изменения и дам вам знать, как они идут. Это стороннее поисковое приложение Watson, поэтому я думаю, им нужно будет внести эти изменения в свое приложение для версии 1.7. - person Pete Drennan; 06.09.2014
comment
Блестяще, это получилось! У меня было несколько поисковых запросов, зарегистрированных в Watson, и я поместил их все туда. Мне просто нужно было добавить импорт Watson в apps.py - person Pete Drennan; 06.09.2014
comment
Я получал эту ошибку, потому что мой файл wsgi.py устарел, django 1.7 имеет новый формат для этого, и после исправления этого все было в порядке с помощью gunicorn 19.1.0 (19.1.1 не работает). Однако с runserver все было в порядке, поэтому я столкнулся с проблемой только в развертывании prod. - person radtek; 29.10.2014
comment
Я неоднократно получал эту ошибку при выполнении runserver или чего-либо еще с manage.py. Это было много времени спустя после успешного обновления до 1.7. Оказалось, что это не имеет к этому никакого отношения, а лишь кусок кода, который я скопировал для справки и оставил внизу файла models.py. В django 1.7, если вы получите эту ошибку, ошибка, вероятно, будет где-то в models.py. - person MagicLAMP; 03.11.2015

Я получал эту ошибку, когда обновлял шаблон проекта django до версии 1.7. Одна вещь, которая изменилась, — это файл wsgi.py, поэтому он нуждался в некотором обновлении. Вот моя трассировка:

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/sync.py", line 93, in handle
    self.handle_request(listener, req, client, addr)
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/sync.py", line 134, in handle_request
    respiter = self.wsgi(environ, resp.start_response)
  File "/home/kpmteam/staging/deploys/20141029-115625/site/lib/django/core/handlers/wsgi.py", line 168, in __call__
    self.load_middleware()
  File "/home/kpmteam/staging/deploys/20141029-115625/site/lib/django/core/handlers/base.py", line 46, in load_middleware
    mw_instance = mw_class()
  File "/home/kpmteam/staging/deploys/20141029-115625/site/lib/django/middleware/locale.py", line 23, in __init__
    for url_pattern in get_resolver(None).url_patterns:
  File "/home/kpmteam/staging/deploys/20141029-115625/site/lib/django/core/urlresolvers.py", line 372, in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
  File "/home/kpmteam/staging/deploys/20141029-115625/site/lib/django/core/urlresolvers.py", line 366, in urlconf_module
    self._urlconf_module = import_module(self.urlconf_name)
  File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
  File "/home/kpmteam/staging/site/kpm/urls.py", line 7, in <module>
    admin.autodiscover()
  File "/home/kpmteam/staging/deploys/20141029-115625/site/lib/django/contrib/admin/__init__.py", line 23, in autodiscover
    autodiscover_modules('admin', register_to=site)
  File "/home/kpmteam/staging/deploys/20141029-115625/site/lib/django/utils/module_loading.py", line 67, in autodiscover_modules
    for app_config in apps.get_app_configs():
  File "/home/kpmteam/staging/deploys/20141029-115625/site/lib/django/apps/registry.py", line 137, in get_app_configs
    self.check_apps_ready()
  File "/home/kpmteam/staging/deploys/20141029-115625/site/lib/django/apps/registry.py", line 124, in check_apps_ready
    raise AppRegistryNotReady("Apps aren't loaded yet.")
AppRegistryNotReady: Apps aren't loaded yet.

Вот как выглядел файл wsgi.py:

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

А теперь (запуск Django 1.7 с gunicorn 19.1.0):

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

Изменение последних двух строк исправило это. Обратите внимание, что ваш DJANGO_SETTINGS_MODULE может отличаться, обычно это «project_name.settings».

person radtek    schedule 29.10.2014

Я опаздываю на вечеринку, но если вы используете django-registration, вам придется переключиться на django-regitration-redux.

https://pypi.python.org/pypi/django-registration-redux/< /а>

См. этот ответ: проблема совместимости регистрации Django с django 1.7

person wouldnt    schedule 05.01.2015

Я нашел решение:

import django

django.setup()

person julian salas    schedule 29.09.2016