AppRegistryNotReady: приложения еще не загружены - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь запросить данные из базы данных, используя оболочку Python. settings.py включает в себя:


import django
django.setup()

...

INSTALLED_APPS = [
    'django.contrib.contenttypes',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'products.apps.ProductsConfig',
    'users.apps.UsersConfig',
    'crispy_forms',
]

Когда я открываю Python shell, я делаю:

> from django.conf import settings
> settings.configure()

Затем я пытаюсь импортировать модели:

> from products.models import Product

Однако , Python возвращает:

django .core.exceptions.AppRegistryNotReady: приложения еще не загружены.

Я пытался добавить django.setup() вызовите в настройках , а также , переместив этот оператор после INSTALLED_APPS.

РЕДАКТИРОВАТЬ: С django.setup() я получаю следующую ошибку при попытке запустить команду runserver:

django .core.exceptions.ImproperlyConfigured: параметр SECRET_KEY должен не быть пустым.

1 Ответ

1 голос
/ 29 апреля 2020

Как вы заметили, django не была правильно инициализирована, и поэтому вы получаете это сообщение.

Как упоминалось @ davit-tovmasyan, есть встроенная команда manage.py для открытия django оболочка в правильном контексте:

./manage.py shell

Кроме того, если вы установите django -extensions , есть очень полезная команда, которая импортирует все ваши модели плюс общий импорт:

$ ./manage.py shell_plus

# Shell Plus Model Imports
from django.contrib.admin.models import LogEntry
from project.my_app.models import Model1, Model2
# ...etc, for all django and project apps
# Shell Plus Django Imports
from django.core.cache import cache
from django.conf import settings
# ...
>>> type your python here

Если вы хотите запустить собственный скрипт, например, в temp.py, вы можете скопировать код manage.py в новый файл и запустить его напрямую:

import os
import django

# these must be before any other imports of django app code/models
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings")
django.setup() 

from my_app.models import Product
print(Product.objects.all())

# at the command line:
$> chmod +x temp.py
$> ./tmp.py

Также с расширениями django run_script - это папка scripts, в которую можно добавлять простые python сценарии с помощью метода run().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...