Django 1.9:我应该避免在“django.setup()”期间导入模型吗?
Django 1.9: Should I avoid importing models during `django.setup()`?
将我的应用程序移植到 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 <module>
from django.contrib.contenttypes.models import ContentType #<= The important part
django/contrib/contenttypes/models.py:159, in <module>
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.
我的主要问题是:
我应该在我的 Django 应用程序的 __init__.py
中导入我的模型吗?
它似乎触发了 django.models.ModelBase
元类,该元类在创建模型之前检查应用程序是否准备就绪。
Should I import my models in the __init__.py
of my django apps ?
不,您不得 不在任何已安装应用程序的 __init__.py
文件中导入任何模型。这在 1.9 中不再可能。
All models need to be defined inside an installed application or
declare an explicit app_label. Furthermore, it isn’t possible to
import them before their application is loaded. In particular, it
isn’t possible to import models inside the root package of an
application.
将我的应用程序移植到 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 <module>
from django.contrib.contenttypes.models import ContentType #<= The important part
django/contrib/contenttypes/models.py:159, in <module>
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.
我的主要问题是:
我应该在我的 Django 应用程序的 __init__.py
中导入我的模型吗?
它似乎触发了 django.models.ModelBase
元类,该元类在创建模型之前检查应用程序是否准备就绪。
Should I import my models in the
__init__.py
of my django apps ?
不,您不得 不在任何已安装应用程序的 __init__.py
文件中导入任何模型。这在 1.9 中不再可能。
All models need to be defined inside an installed application or declare an explicit app_label. Furthermore, it isn’t possible to import them before their application is loaded. In particular, it isn’t possible to import models inside the root package of an application.