2014-09-05 3 views
16

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

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. 

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

+0

сделал вы удалили юг от установленных приложений? –

+0

Да, я выполнил следующие шаги: [link] (https: //docs.djangoproject.com/en/dev/themes/migrations /), и я все еще получаю сообщение об ошибке –

+0

note: Я использую django-allauth и делаю то же самое с миграциями в этом приложении, не уверен, что это вызывает проблемы. –

ответ

22

Проблема с этой линии ("/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 это имя из модуль, в который вы вставляете конфигурацию.

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

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

+0

Спасибо, Василий, я пойду на внесение этих изменений и дам вам знать как они идут. Это приложение стороннего поиска Watson, поэтому я думаю, что им нужно будет внести эти изменения в свое приложение для 1.7 –

+1

Блестяще, вот и все! У меня было несколько поисков, зарегистрированных в Watson, и я их всех там. Мне просто пришлось добавить «import Watson» в apps.py –

+0

Я получал эту ошибку, потому что мой файл wsgi.py устарел, у django 1.7 есть новый формат для этого, и после исправления все это было прекрасно, используя gunicorn 19.1.0 (19.1.1 нарушается). Все было в порядке с сервером-сервером, поэтому я только попал в проблему при развертывании prod. – radtek

15

Я получал эту ошибку, когда обновлял свой проект проекта 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»

4

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

import django 

django.setup()

+1

Это сработало для меня для скрипта. – sureshvv

Смежные вопросы