Django:如何解决模型导入中的“应用尚未加载”错误?

时间:2018-07-14 20:24:43

标签: python django

在我应用的“ views.py”文件中,我具有以下导入内容:

from .models import City

在本地主机上启动时,导入和应用程序运行正常。

在与“ views.py”和“ models.py”相同的文件夹中,我创建了另一个文件“ database_csv_imports.py”,用于从.csv文件一次性导入数据库。

如果我使用与上述相同的行将City模型导入“ database_csv_imports.py”文件,则会收到错误消息:

Traceback (most recent call last):
  File "database_csv_imports.py", line 3, in <module>
    from .models import City
SystemError: Parent module '' not loaded, cannot perform relative import 

所以我将相对导入更改为绝对导入:

from models import City

但是,这引发了另一个错误:

Traceback (most recent call last):
  File "database_csv_imports.py", line 3, in <module>
    from models import City
  File "/home/bart/python_projects/javascript/models.py", line 19, in <module>
    class Listing(models.Model):
  File "/home/bart/python_projects/testenv/lib/python3.5/site-packages/django/db/models/base.py", line 100, in __new__
    app_config = apps.get_containing_app_config(module)
  File "/home/bart/python_projects/testenv/lib/python3.5/site-packages/django/apps/registry.py", line 244, in get_containing_app_config
    self.check_apps_ready()
  File "/home/bart/python_projects/testenv/lib/python3.5/site-packages/django/apps/registry.py", line 127, in check_apps_ready
    raise AppRegistryNotReady("Apps aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.

我看过类似的问题,但没有找到解决方案: 我正在virtualenv中运行所有脚本,我的应用程序安装在“ settings.py”中,SECRET_KEY不为空,并且makemigrationsmigrate均已应用。我还认为解决方案发布在这里:django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet. file init在这种情况下可能对我来说太过分了。

有人可以帮我解决导入错误吗?

1 个答案:

答案 0 :(得分:0)

如果尝试直接在包内运行脚本,

Python和Django都会与您抗衡。

完成此操作的最佳方法是使用entry_points的{​​{1}}功能,或编写自定义django admin命令(https://docs.djangoproject.com/en/2.0/howto/custom-management-commands/)。

如果您想用困难的方式做,这些就是您需要的步骤

  1. python路径需要包含包的父目录。最好的方法是从包含setup.py的目录中运行pip install -e .。如果您没有setup.py(您确实应该这样做!),并且您正在使用virtualenvwrapper,则setup.py命令将为您完成此操作。否则,您需要编辑add2virtualenv /home/bart/python_projects环境变量。

  2. 要执行的文件中的导入不能是相对的。就您而言,这意味着PYTHONPATH(您需要从软件包级别开始,即from javascript.models import City上的目录)。

  3. 您需要设置PYTHONPATH指向您的设置文件。

  4. 您需要在导入DJANGO_SETTINGS_MODULE之后配置django,在导入模型之前,它应该位于import django; django.setup()文件的顶部。