【发布时间】:2017-05-15 11:39:38
【问题描述】:
我的问题最初是由一个错误提出的,突出显示here。原来的问题现在已经解决了,但这留下了一个关于导入如何在 Python 中工作的问题。以下是使用 Django 重现问题的快速步骤:
- 使用 django-admin 启动一个虚拟项目
- 用它创建一个应用程序:
./manage.py startapp dummy_app -
在应用程序
models.py中定义一个扩展Django模型的函数和一个类,如下:from django.db import models # auxiliary function in models def aux_function(value): print(value) class Report(models.Model): class Meta: managed = False -
在新应用模块的
__init__中,导入提到的aux_function如下:from dummy_app.models import aux_function - 将应用程序添加到
INSTALLED_APPS并运行开发服务器
会导致异常:
File "/home/aanikeev/PycharmProjects/dummy/dummy_app/__init__.py", line 1, in <module>
from dummy_app.models import aux_function
File "/home/aanikeev/PycharmProjects/dummy/dummy_app/models.py", line 8, in <module>
class Report(models.Model):
File "/home/aanikeev/.virtualenvs/dummy/lib/python3.5/site-packages/django/db/models/base.py", line 110, in __new__
app_config = apps.get_containing_app_config(module)
File "/home/aanikeev/.virtualenvs/dummy/lib/python3.5/site-packages/django/apps/registry.py", line 247, in get_containing_app_config
self.check_apps_ready()
File "/home/aanikeev/.virtualenvs/dummy/lib/python3.5/site-packages/django/apps/registry.py", line 125, in check_apps_ready
raise AppRegistryNotReady("Apps aren't loaded yet.")
没关系,我们从文档中知道,在 Django 初始化之前我们不应该导入模型或模块(参见ref 1,ref 2)。我不清楚为什么从模块导入函数会导致在同一模块中隐式导入类(这正是发生的情况,因为提到的异常源自 Model 元的构造函数类)?
【问题讨论】: