如何使Django项目中的其他应用可以使用该应用的模型?

问题描述 投票:0回答:1

似乎是一种最佳实践(或至少一种常用方法),该方法创建一个基于Django 3的全栈项目,该项目使用特定于项目的Django应用程序(而不是独立的Django应用程序),并具有类似这样的结构(请参阅here ):

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以最基本的形式(没有规则,视图等)集成了应用程序(此处为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',
]

[在另一个应用程序(例如app2/logic.py)中使用一个应用程序(例如app1/logic.py)的逻辑效果很好(例如,通过from backend.apps.app2.logic import ...中的app1/logic.py)。

但是,如果我尝试按照app2的逻辑访问app1的模型,则会得到django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.。我可以为应用程序实现数据库包装,以允许跨应用程序数据库访问。但是,无论如何,屁股应用程序都是跨项目的,我想避免这种情况,并允许更轻松地访问。如何解决此问题?

[似乎是一种最佳实践(或至少一种常用方法),它创建一个基于Django 3的全栈项目,该项目使用特定于项目的Django应用程序(而不是独立的Django应用程序),并具有结构...

django python-3.x django-models django-apps
1个回答
1
投票

__init__.py中可能会有一些代码甚至在注册和准备好应用之前都试图访问数据库。因此,如果__init__.py中有任何代码,请对其进行注释,或确保一旦应用就绪,它将访问数据库。

© www.soinside.com 2019 - 2024. All rights reserved.