2014-09-05 13 views
16

Tôi đang cố nâng cấp một dự án từ Django 1.6 lên 1.7. Cho đến nay, tôi đã tạo một virtualenv mới với tất cả các cài đặt tương tự và nâng cấp phiên bản Django lên bản phát hành mới. Tôi cần phải nâng cấp từ miền Nam, nhưng đã lỗi khi làm điều đó, vì vậy tôi nghĩ tôi sẽ ban đầu chỉ thử runserver, và tôi nhận được lỗi sau:Lỗi nâng cấp Django 1.7: AppRegistryNotReady: Mô hình chưa được tải

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. 

Bất cứ ý tưởng gì có thể gây ra lỗi và cách sửa chữa nó?

+0

bạn đã loại bỏ nam từ các ứng dụng được cài đặt? –

+0

có, tôi đã làm theo các bước sau đây: [link] (https: //docs.djangoproject.com/en/dev/topics/migrations /) và tôi vẫn nhận được thông báo lỗi –

+0

: Tôi đang sử dụng django-allauth và thực hiện tương tự với việc di chuyển trong ứng dụng đó, không chắc liệu điều đó có gây ra sự cố hay không. –

Trả lời

22

Vấn đề là với dòng này ("/Users/Name/Dev/tps/products/models.py", dòng 127):

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

Bạn thử tham khảo một mô hình đồng thời nhập khẩu. Nó không còn có thể trong Django 1.7. Django 1.7 cho phép bạn sử dụng các mô hình của bạn chỉ sau khi tất cả các ứng dụng được tải. Bạn nên di chuyển cuộc gọi này đến ready callback của AppConfig, như thế này:

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

Sau đó, bạn nên tham khảo AppConfig này trong __init__.py của products ứng dụng của bạn:

default_app_config = 'products.apps.ProductsConfig' 

đâu apps là tên của mô-đun nơi bạn đặt cấu hình.

liên quan Django doc: https://docs.djangoproject.com/en/dev/ref/applications/

Nhìn chung, vì sự thay đổi này, chuyển sang Django 1,7 là không dễ dàng như người ta muốn nó được. Dưới đây là một số mẹo khắc phục sự cố: https://docs.djangoproject.com/en/1.7/ref/applications/#troubleshooting

+0

Cảm ơn Vasily, tôi sẽ đi thực hiện những thay đổi này và cho bạn biết làm thế nào họ đi. Đây là ứng dụng tìm kiếm của bên thứ ba Watson, vì vậy tôi đoán họ sẽ cần phải thực hiện những thay đổi này cho ứng dụng của họ cho 1,7 –

+1

Rực rỡ, điều đó đã xảy ra! Tôi đã có nhiều tìm kiếm đã đăng ký với Watson và tôi đặt tất cả chúng vào đó. Tôi chỉ cần thêm "nhập Watson" vào apps.py –

+0

Tôi đã nhận được lỗi này vì tệp wsgi.py của tôi đã lỗi thời, django 1.7 có định dạng mới cho điều này và sau khi sửa chữa mọi thứ này là tốt bằng cách sử dụng gunicorn 19.1.0 (19.1.1 bị hỏng). Tất cả mọi thứ đã tốt với runerver mặc dù vì vậy tôi chỉ nhấn vấn đề trong triển khai sản. – radtek

15

Tôi đã gặp phải lỗi này khi cập nhật mẫu dự án django của mình lên 1.7. Một điều đã thay đổi là tệp wsgi.py do đó cần một số cập nhật. Dưới đây là traceback của tôi:

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. 

Đây là những gì các tập tin wsgi.py trông giống như:

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

Và bây giờ (chạy Django 1,7 với 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() 

Thay đổi hai dòng cuối cố định nó. Lưu ý rằng DJANGO_SETTINGS_MODULE của bạn có thể khác, thường là "project_name.settings"

4

Tôi tìm thấy giải pháp thực hiện:

import django 

django.setup()

+1

Điều này làm việc cho tôi cho một kịch bản. – sureshvv

Các vấn đề liên quan