当前位置: 首页 > 知识库问答 >
问题:

在django项目中,如何使应用程序的模型可供其他应用程序使用?

艾成益
2023-03-14

创建一个基于Django3的全栈项目似乎是最佳实践(或至少一种常用方法),该项目使用特定于项目的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)通过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)可以很好地工作(例如通过app1/logic.py中的from backend.apps.app2.logic import...)。

但是,如果我试图在app2的逻辑中访问app1的模型,我会得到django.core.exceptions.appregistrynotready:Apps arn't loaded yet.。我可以为一个应用程序实现一个数据库包装器,以允许跨应用程序的数据库访问。然而,由于应用程序是跨项目的,无论如何,我希望避免这一点,并允许访问更容易。如何解决此问题?

共有1个答案

蓬祺
2023-03-14

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

 类似资料:
  • 我正在Django上做类似ERP的小项目,其中包含不同的应用程序(产品、销售、采购、会计、MRP、...)。其中一些有依赖关系(例如,销售应用程序需要产品应用程序)。 继承或抽象类似乎也是不合适的,因为我不是试图为子产品创建模型,而是在表中现有信息(条目)的基础上进行增长或扩展。 实现这一点的最佳方法是什么?我应该考虑编写自定义迁移操作吗?否则,还有更好的办法吗?谢谢!

  • Photoshop 提供许多可帮助您在其它应用程序中使用图像的功能。由于 Adobe 产品之间是紧密集成的,因此许多 Adobe 应用程序都可以直接导入 Photoshop (PSD) 格式文件并使用图层、图层样式、蒙版、透明度及效果等 Photoshop 功能。 为页面排版程序准备图像 如何为页面排版程序准备图像取决于程序可识别的文件格式: Adobe InDesign 2.0 和更高版本可以放

  • 问题内容: 我有一个带有数据库和相应的 models.py 文件的现有Django应用程序。 我有一个新的Tornado应用程序,可以为其他应用程序提供Web服务。它需要从同一数据库读取/写入,并且我要使用的模型文件中有代码。 如何在Tornado请求处理程序中最好地使用Django数据库和模型?它像建立到 models.py Django项目文件夹的符号链接,导入Django模块并使用它那样简单

  • 我有一个Django 1.10内置的网站。该网站有3种不同的应用程序:团队、成员和新闻。 第一个叫做团队的应用程序有一个叫做团队的模型。 这是Team/models.py: 第二个应用称为成员,它有一个名为成员的模型。 这是Member/models.py: 我想要的是在成员档案中包含团队的名称,所以我知道它应该是这样的: 但是我不知道在括号里放什么,也不知道如何将团队的模型导入到成员的模型中。我

  • 使用 Adobe Bridge 和 After Effects 使用 Adobe Bridge 可运行动画预设;运行跨产品工作流程自动化脚本;查看和管理文件和文件夹;通过将关键字、标签和等级分配给您的文件来组织这些文件;搜索文件和文件夹;以及查看、编辑和添加元数据。 要从 After Effects 打开 Adobe Bridge,请选择“文件”>“在 Bridge 中浏览”。 要在 Adobe

  • 我在用一个垂直的图书馆。返回项目Reactor类型Mono的x应用程序。 我有一个verticle,它接收这种反应类型,并打算通过事件总线将内容发送到另一个verticle: 这是正确的方法吗?我应该换成垂直吗。在将消息发送到事件总线之前,x事件循环线程池?在一起使用这些库时,有什么我应该注意的吗?