Django 1.7升级错误:AppRegistryNotReady:模型尚未加载 [英] Django 1.7 upgrade error: AppRegistryNotReady: Models aren't loaded yet

查看:143
本文介绍了Django 1.7升级错误:AppRegistryNotReady:模型尚未加载的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将项目从Django 1.6升级到1.7。到目前为止,我已经创建了一个具有所有相同安装的新的virtualenv,并将Django版本升级到新版本。我需要从南方升级,但有错误这样做,所以我以为我最初只是尝试runserver,并且我得到以下错误:

 追溯(最近的最后一次呼叫):
文件manage.py,第10行在< module>
execute_from_command_line(sys.argv)
文件/Users/Name/.virtualenvs/test17/lib/python2.7/site-packages/django/core/management/__init__.py,第385行,在execute_from_command_line
utility.execute()
文件/Users/Name/.virtualenvs/test17/lib/python2.7/site-packages/django/core/management/__init__.py,第354行,执行
django.setup()
文件/Users/Name/.virtualenvs/test17/lib/python2.7/site-packages/django/__init__.py,第21行,在设置
apps.populate(settings.INSTALLED_APPS)
文件/Users/Name/.virtualenvs/test17/lib/python2.7/site-packages/django/apps/registry.py,第108行,在
app_config.import_models(all_models)
文件/Users/Name/.virtualenvs/test17/lib/python2.7/site-packages/django/apps/config.py,第197行,在import_models
self.models_module = import_module(models_module_name)
文件/System/Library/Frameworks/Python.framework/Vers离子/ 2.7 / lib / python2.7 / importlib / __ init__.py,第37行,import_module
__import __(name)
文件/Users/Name/Dev/tps/products/models.py ,第127行,< module>
watson.register(Product.objects.exclude(productimage = None))
文件/Users/Name/.virtualenvs/test17/lib/python2.7/site-packages/django/db/models /manager.py,第92行,在manager_method
中返回getattr(self.get_queryset(),name)(* args,** kwargs)
文件/Users/Name/.virtualenvs/test17/ lib / python2.7 / site-packages / django / db / models / query.py,第698行,排除
return self._filter_or_exclude(True,* args,** kwargs)
文件 /Users/Name/.virtualenvs/test17/lib/python2.7/site-packages/django/db/models/query.py,第707行,在_filter_or_exclude
clone.query.add_q(〜Q(* args,** kwargs))
文件/Users/Name/.virtualenvs/test17/lib/python2.7/site-packages/django/db/models/sql/query.py,第1287行, add_q
子句,require_inner = self._add_q(where_part,self.used_aliases)
文件/Users/Name/.virtualenvs/test17/lib/python2.7/site-packages/django/db/models /sql/query.py,第1314行,在_add_q中
current_negated = current_negated,connector = connector)
文件/Users/Name/.virtualenvs/test17/lib/python2.7/site-packages/django/db/models/sql/query.py ,第1138行,build_filter
lookups,parts,reffed_aggregate = self.solve_lookup_type(arg)
文件/Users/Name/.virtualenvs/test17/lib/python2.7/site-packages/django/ db / models / sql / query.py,第1076行,在solve_lookup_type
_,field,_,lookup_parts = self.names_to_path(lookup_splitted,self.get_meta())
文件/ Users / Name /.virtualenvs/test17/lib/python2.7/site-packages/django/db/models/sql/query.py,第1339行,在names_to_path
字段中,model,direct,m2m = opts.get_field_by_name( name)
文件/Users/Name/.virtualenvs/test17/lib/python2.7/site-packages/django/db/models/options.py,第416行,get_field_by_name
cache = self.init_name_map()
文件/Users/Name/.virtualenvs/test17/lib/python2.7/site-packages/django/db/models/optio ns.py,第445行,init_name_map
for f,model in self.get_all_related_m2m_objects_with_model():
文件/Users/Name/.virtualenvs/test17/lib/python2.7/site-packages /django/db/models/options.py,第563行,在get_all_related_m2m_objects_with_model
cache = self._fill_related_many_to_many_cache()
文件/Users/Name/.virtualenvs/test17/lib/python2.7/ site-packages / django / db / models / options.py,第577行,在_fill_related_many_to_many_cache中
for self.apps.get_models()中的klass:
文件/Users/Name/.virtualenvs/test17 /lib/python2.7/site-packages/django/utils/lru_cache.py,第101行,包装器
result = user_function(* args,** kwds)
文件/ Users / Name /.virtualenvs/test17/lib/python2.7/site-packages/django/apps/registry.py,第168行,在get_models
self.check_models_ready()
文件/ Users / Name / .virtualenvs / test17 / lib / python2.7 / site-packages / django / apps / registry.py,第131行,check_m odels_ready
raise AppRegistryNotReady(Models are not loaded yet。)
django.core.exceptions.AppRegistryNotReady:模型尚未加载。

任何想法可能导致错误以及如何解决?

解决方案

问题在于这一行(/Users/Name/Dev/tps/products/models.py,第127行):

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

您尝试在导入时引用模型。在Django 1.7中已经不再可能了。 Django 1.7仅在加载所有应用程序后才能使用模型。您应该将此调用移动到准备回调 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 您的产品应用程序:

  default_app_config ='products.apps.ProductsConfig'

其中 apps 是您放置配置的模块的名称。



相关的Django文档: https://docs.djangoproject.com/en/dev/ref/applications/


$ b $总而言之,由于这种变化,迁移到Django 1.7并不像人们想要的那么容易。以下是一些疑难解答提示: https://docs.djangoproject.com/en/ 1.7 / ref / applications /#troubleshooting


I am trying to upgrade a project from Django 1.6 to 1.7. So far, I have created a new virtualenv with all the same installs and upgraded the Django version to the new release. I need to upgrade from South, but had errors doing so, so I thought I'll initially just try runserver, and I get the following error:

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.

Any ideas what might be causing the error and how to fix it?

解决方案

The problem is with this line ("/Users/Name/Dev/tps/products/models.py", line 127):

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

You try to reference a model at the import time. It is no longer possible in Django 1.7. Django 1.7 allows you to use your models only after all of the applications are loaded. You should move this call to the ready callback of AppConfig, like this:

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

Then you should reference this AppConfig in the __init__.py of your products app:

default_app_config = 'products.apps.ProductsConfig'

Where apps is the name of the module where you put the config.

Relevant Django doc: https://docs.djangoproject.com/en/dev/ref/applications/

Overall, because of this change, migrating to Django 1.7 is not as easy as one would like it to be. Here are some troubleshooting tips: https://docs.djangoproject.com/en/1.7/ref/applications/#troubleshooting

这篇关于Django 1.7升级错误:AppRegistryNotReady:模型尚未加载的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆