2014-09-05 88 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

你從安裝的應用程序移除南? – 2014-09-05 07:42:01

+0

是的,我按照這裏的步驟:[鏈接](https://docs.djangoproject。com/en/dev/topics/migrations /),我仍然得到錯誤 – 2014-09-05 08:00:20

+0

注意:我正在使用django-allauth,並對該應用程序中的遷移執行相同的操作,但不確定是否會導致問題。 – 2014-09-05 08:01:57

回答

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)) 

那麼你應該在你的products應用的__init__.py引用此AppConfig

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

+0

感謝Vasily,我會去做一些改變並讓你知道他們如何去。這是第三方搜索應用程序沃森,所以我想他們將需要對他們的應用程序進行這些更改1.7 – 2014-09-06 01:03:34

+1

輝煌,這是做到了!我在沃森註冊過多次搜索,我把它們放在那裏。我只是不得不添加「進口沃森」到apps.py – 2014-09-06 01:45:57

+0

我得到這個錯誤,因爲我的wsgi.py文件過時了,django 1.7有一個新的格式,並修復後,一切正常使用gunicorn 19.1.0 (19.1.1被打破)。儘管運行服務器一切正常,但我只是在產品部署中遇到了問題。 – radtek 2014-10-29 17:08:02

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() 

現在(與gunicorn 19.1.0上運行的Django 1.7):

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 2016-11-04 07:12:19

相關問題