Django 精彩的应用程序不是';尚未加载错误

Django 精彩的应用程序不是';尚未加载错误,django,python-3.x,Django,Python 3.x,我搜索了SO和Google,找不到我问题的答案 我已启动virtualenv并在终端中运行此命令: python bin/process_messages.py 出现以下错误: 堆栈跟踪: Traceback (most recent call last): File "bin/process_messages.py", line 6, in <module> from xyz.models import get_sku File "/Users/myname/.environ

我搜索了SO和Google,找不到我问题的答案

我已启动virtualenv并在终端中运行此命令:

python bin/process_messages.py
出现以下错误:

堆栈跟踪:

Traceback (most recent call last):
File "bin/process_messages.py", line 6, in <module>
  from xyz.models import get_sku
File "/Users/myname/.environments/xyz_env/lib/python3.6/site-packages/xyz/models.py", line 19, in <module>
class Suppliers(models.Model):
File "/Users/myname/.environments/xyz_env/lib/python3.6/site-packages/django/db/models/base.py", line 110, in __new__
app_config = apps.get_containing_app_config(module)
File "/Users/myname/.environments/xyz_env/lib/python3.6/site-packages/django/apps/registry.py", line 247, in get_containing_app_config
self.check_apps_ready()
File "/Users/myname/.environments/xyz_env/lib/python3.6/site-packages/django/apps/registry.py", line 125, in check_apps_ready
raise AppRegistryNotReady("Apps aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
我安装的应用程序:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'xyz',
]

通过导入
get\u sku
,您就是在运行
django.setup()
之前导入您的模型。您需要将此导入向下移动,以便在
django.setup()之后进行导入

在使用Django的独立脚本中,我通常有两组导入。第一个包含获取Django设置的最小值,第二个包含所有其他导入,包括模型等:

#!/usr/bin/env python
import os
import django

__author__ = 'me'


def check_django_environment(default_settings):
    # Environment setup for Django project files:
    os.sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
    if not os.environ.get('DJANGO_SETTINGS_MODULE'):
        # Don't override settings if it is specified.
        os.environ['DJANGO_SETTINGS_MODULE'] = default_settings
        from django.conf import settings

        return getattr(settings, 'DEBUG', None)

check_django_environment('xyz.settings')
django.setup()

import boto3
from xyz.settings import SQS_QUEUE_NAME
from xyz.models import get_sku

通过导入
get\u sku
,您就是在运行
django.setup()
之前导入您的模型。您需要将此导入向下移动,以便在
django.setup()之后进行导入

在使用Django的独立脚本中,我通常有两组导入。第一个包含获取Django设置的最小值,第二个包含所有其他导入,包括模型等:

#!/usr/bin/env python
import os
import django

__author__ = 'me'


def check_django_environment(default_settings):
    # Environment setup for Django project files:
    os.sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
    if not os.environ.get('DJANGO_SETTINGS_MODULE'):
        # Don't override settings if it is specified.
        os.environ['DJANGO_SETTINGS_MODULE'] = default_settings
        from django.conf import settings

        return getattr(settings, 'DEBUG', None)

check_django_environment('xyz.settings')
django.setup()

import boto3
from xyz.settings import SQS_QUEUE_NAME
from xyz.models import get_sku

除了knbk的答案,您还可以使用
manage.py

下面是一个示例脚本,假设
script.py

from xyz.models import get_sku

if __name__ == '__main__':
    print(get_sku)
您可以像这样运行它:

./manage.py shell < script.py
/manage.py shell

也许不是你想要的,但是值得知道。

除了knbk的答案,你也可以使用
manage.py

下面是一个示例脚本,假设
script.py

from xyz.models import get_sku

if __name__ == '__main__':
    print(get_sku)
您可以像这样运行它:

./manage.py shell < script.py
/manage.py shell
也许不是你想要的,但是值得知道