当前位置:  开发笔记 > 编程语言 > 正文

Django 1.9:我应该避免在`django.setup()`中导入模型吗?

如何解决《Django1.9:我应该避免在`django.setup()`中导入模型吗?》经验,为你挑选了1个好方法。

把我的应用程序移植到django 1.9,我吓坏了 django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet

基本上我的堆栈跟踪是:

  manage.py
    execute_from_command_line(sys.argv)
  django/core/management:352, in execute_from_command_line
    utility.execute()
  django/core/management/__init__.py:326, in execute
    django.setup()
  django/__init__.py:18, in setup
    apps.populate(settings.INSTALLED_APPS)
  django/apps/registry.py:85, in populate
    app_config = AppConfig.create(entry)
  django/apps/config.py:90, in create
    module = import_module(entry)
  python2.7/importlib/__init__.py:37, in import_module
    __import__(name)
  myapp/mylib/__init__.py:52, in 
    from django.contrib.contenttypes.models import ContentType   #<= The important part
  django/contrib/contenttypes/models.py:159, in 
    class ContentType(models.Model):
  django/db/models/base.py:94, in __new__
    app_config = apps.get_containing_app_config(module)
  django/apps/registry.p:239, in get_containing_app_config
    self.check_apps_ready()
  django/apps/registry.py:124, in check_apps_ready
    raise AppRegistryNotReady("Apps aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.

我的主要问题在这里:

我应该在__init__.py我的django应用程序中导入我的模型吗?

它似乎触发了django.models.ModelBase元类,在创建模型之前检查应用程序是否准备就绪.



1> knbk..:

我应该在__init__.py我的django应用程序中导入我的模型吗?

不,你一定不是在导入任何模式__init__.py任何安装的应用程序的文件.这在1.9中已不再可能.

从发行说明:

所有模型都需要在已安装的应用程序中定义,或者声明一个显式的app_label.此外,在加载应用程序之前无法导入它们.特别是,无法在应用程序的根包中导入模型.

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有