Как сделать модели приложения доступными для других приложений в проекте django? - PullRequest
0 голосов
/ 24 января 2020

Лучше всего (или хотя бы одним из распространенных способов) создать проект полного стека на основе Django 3, в котором используются приложения c Django (вместо автономных Django приложений) с указанием проекта. структура, подобная этой (см., например, здесь ):

fullstack_project/
  frontend/
    ... # frontend stuff goes into here
  backend/  # Django project name
    apps/
      app1/
        apps.py
        logic.py
        models.py
        ...
      app2/
        apps.py
        logic.py
        models.py
      ...
    wsgi.py
    ...
  manage.py

Приложения (здесь: app1) интегрированы в наиболее базовую форму c (без ruls, views, et c.) через fullstack_project/backend/apps/app1/apps.py

class App1Config(AppConfig):
    name = 'backend.apps.app1'

и fullstack_project/backend/settings.py

INSTALLED_APPS = [
    ...
    'backend.apps.app1.apps.App1Config',
    'backend.apps.app2.apps.App2Config',
]

Использование logi c одного приложения (например, app2/logic.py) в другом приложении ( например, app1/logic.py) работает просто отлично (например, через from backend.apps.app2.logic import ... в app1/logic.py).

Однако, если я пытаюсь получить доступ к моделям app1 в логи c из app2, я получаю django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.. Я мог бы реализовать оболочку базы данных для приложения, чтобы разрешить доступ к базе данных между приложениями. Тем не менее, в любом случае, приложения являются кросс-проектными, но я бы хотел избежать этого и сделать доступ проще. Как я могу исправить эту проблему?

1 Ответ

1 голос
/ 24 января 2020

Возможно, в __init__.py будет какой-то код, который пытается получить доступ к БД даже до того, как приложение будет зарегистрировано и готово. так что если у вас есть код в __init__.py, прокомментируйте его или убедитесь, что он получит доступ к базе данных, как только приложение будет готово.

...